使用 Knockout Observable 数组

Posted

技术标签:

【中文标题】使用 Knockout Observable 数组【英文标题】:Using Knockout Observable Array 【发布时间】:2013-08-08 04:04:08 【问题描述】:

我正在开发一个 MVC 项目,我在客户端使用敲除来操作数据。当我从服务器接收数据时,我只需将其传递给 observableArray,如下所示。数据在服务器端转换为 JSON。我以 JSON 形式接收数据。

现在我的问题是敲除,因为当我将数据绑定到文本框时,我想在标签中看到文本框编辑的值,如下所示

<p>First name: <strong data-bind="text: name()[0].firstName "></strong></p>
<p>Last name: <strong data-bind="text: name()[0].lastName"></strong></p>
<input data-bind="value: name()[0].firstName" />
<input data-bind="value: name()[0].lastName" />


var self = this;

        self.users= ko.observableArray(@html.Raw(Model.UserJSON));

我无法让更改后的值出现在

元素。但是,如果我有一个 observableArray,它的值在 observable 数组中初始化为 observable ,它也可以正常工作,如下所示。

function name(name, lname)

    this.firstName = ko.observable(name);
    this.lastName = ko.observable(lname);



function AppViewModel() 

    this.name = ko.observableArray([new name("samet","caglar")]);


// Activates knockout.js
ko.applyBindings(new AppViewModel());

我的问题是我是否应该获取我收到的所有数据并将每个 var 定义为可观察的,然后将它们传递给可观察的数组?因为这个解决方案看起来并不高效。也许我错过了什么?

【问题讨论】:

如果您想自动将 json 解析为 observables,请查看映射插件。 【参考方案1】:

如果您想在模型和屏幕上反映变化,那么您需要让整个对象(包括其所有元素)都可观察。就像 PW Kid 建议的那样,查看 kockoutjs 映射插件,因为这将减少您需要编写的代码量。

【讨论】:

以上是关于使用 Knockout Observable 数组的主要内容,如果未能解决你的问题,请参考以下文章

Knockout.js 使每个嵌套对象都成为 Observable

Knockout observable 在函数内部不可访问

获取与 Knockout 绑定的 observable 元素?

knockout从函数中访问observable

在 knockout.js 中更改 observable 但不通知订阅者

Knockout:从observable中删除所有订阅