3

我正在尝试通过 AJAX 接收数据并将其显示在页面上。ajax请求成功,但是knockout没有更新视图。可能是什么问题?

源代码:查看模型

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 回答