繁体   English   中英

使KnockOut可观察的数组属性可观察

[英]Making KnockOut observable array property observable

我有一个可观察的数组AllItems定义为

var ViewModel = function () { 
  var self = this; 
  self.AllItems = ko.observableArray([]);
}

它由来自ajax调用的数据填充,我只是将从Ajax调用接收的属性直接添加到数组中,而无需定义它们。

我在下面的HTML中使用它来填充表格。

 var ViewModel = function() { var self = this; self.AllItems = ko.observableArray([]); } $(document).ready(function() { ko.applyBindings(new ViewModel()); }); 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.1/knockout-min.js"></script> <table> <tbody data-bind="foreach: AllItems"> <td> <span>$</span><span data-bind="text: $data.RequestedPrice"></span> </td> <!-- ko ifnot: (Number(RequestedPrice) > Number(ItemDetails.SmPrice)) --> <input type="button" disabled value="Approve" id="Approved" data-bind="click: $root.ApproveItem" style="background-color:#e1eae5 !important" /> <!-- /ko --> <!-- ko ifnot: (Number(RequestedPrice) > Number(ItemDetails.SmPrice)) --> <input type="button" disabled value="Approve" id="Approved" data-bind="click: $root.ApproveItem" style="background-color:#e1eae5 !important" /> <!-- /ko --> <nobr>$ <input type="text" class="priceChange" onkeypress="return isNumberKey(event)" style="display:inline !important" data-bind="value: $data.RequestedPrice" /> </nobr> </tbody> </table> 

所以我在上面的HTML中有三件事。 首先,我只显示要求价格的文本。 第二,我使用它来禁用按钮,第三,我将其设为可编辑字段。

问题是,当我更改该值时,它不会反映在文本中,并且用于禁用按钮的第二种情况也不会更新。 有人可以告诉我实现此目标需要什么。

三种选择:

  • 从您的js(on)编写一个从后端到确实具有可观察属性的对象的自定义映射;
  • 使用ko.mapping ;
  • 使用带有一些自定义代码的基因敲除

与Angular 1相对,淘汰赛要求您默认情况下要明确指出要观察的东西(使用ko.mapping时,您明确地说所有东西都是可观察的)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM