我正在尝试通过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>
答案 0 :(得分: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>
如果您需要嵌套任何其他属性,则必须更改它,以便实际可以观察到属性。