3

AJAX 経由でデータを受信し、ページに表示しようとしています。ajax リクエストは成功しますが、ノックアウトはビューを更新しません。何が問題になる可能性がありますか?

ソース コード: ビュー モデル

class AppViewModel
  constructor: ->
    @company = ko.observable {name:'n/a', tariff:'n/a', contract:'n/a', balance:'0'}
    @getBriefInfo()
    @companyTariff = ko.computed  => "Tariff: #{@company.tariff}"
    @companyBalance = ko.computed => "Total: #{@company.balance}"


  getBriefInfo: ->
    $.ajax
        type: 'POST'
        url: '/index.php/site/getCompanyShortInfo'
        data: {}
        dataType: 'json'
        contentType: 'json'
        success: (res) =>
          console.log @company(), res.name, res.tariff
          @company res
          console.log @company(), res.name, res.tariff

$ ->
  ko.applyBindings(new AppViewModel(),document.getElementById("company-info"))

ソース コード: 表示

     <ul id="company-info" class="unstyled company-info">
        <li data-bind="text: company.contract"></li>
        <li data-bind="text: company.name"></li>
        <li data-bind="text: companyBalance"></li>
        <li data-bind="text: companyTariff"></li>
    </ul>
4

1 に答える 1

3

プロパティは、そのcompanyプロパティではなく、監視可能です。プロパティに直接バインドするため、会社のオブジェクトが変更されても変更は表示されません。

withバインディングを利用するだけで逃げることができるかもしれません。会社が変わると内容も更新されます。

<ul id="company-info" class="unstyled company-info">
    <!-- ko with: company -->
        <li data-bind="text: contract"></li>
        <li data-bind="text: name"></li>
    <!-- /ko -->
    <li data-bind="text: companyBalance"></li>
    <li data-bind="text: companyTariff"></li>
</ul>

他のプロパティをネストする必要がある場合は、プロパティを実際に監視できるように変更する必要があります。

于 2012-12-05T01:31:52.657 に答える