我一直在阅读这个网站,最后有一个问题尚未得到足够的回答,因此我的需求就这样了。
我有一个可观察的数组,该数组是从在C#应用程序中传递给我的KO视图模型的数据数组创建的。
self.Stuff = ko.observableArray(data.Stuff);
这个数组没有可观察的元素,这就是我的问题。我需要通过onclick编辑元素(状态)。我知道我需要使元素可观察(不确定如何使用data.Stuff部分)或执行“valueHasMutated”但我不完全确定该语法将如何工作。
当然,我的推送和删除工作正常,因为它们触发了arrayobservable并刷新了视图。
if ($form.valid() && isValidStuff) {
self.Stuff.push({ ABC: self.ABCInput(), XYZ: self.XYZInput(), Status: self.StatusInput()});
self.resetValues();
}
self.removeStuff = function () {
self.Stuff.remove(this);
};
self.StuffStatusChng= function (){
//What to do?
self.Stuff.vauleHasMutated();
};
任何帮助或推动正确的方向将是一个很大的帮助,谢谢!如果我没有足够的信息,请告诉我我能提供的信息。
谢谢,
答案 0 :(得分:1)
如何使用淘汰赛映射插件:
http://knockoutjs.com/documentation/plugins-mapping.html
它有一个fromJSON方法,它接受一个json字符串数组,并为每个属性创建一个带有observable属性的可观察数组:
可以在这里找到一个小提琴:http://jsfiddle.net/jiggle/uzn7Z/,一旦绑定通知,你可以更新名字,它会相应地更新属性
HTML:
<div data-bind="foreach: people">
<div>
<input type="text" data-bind="value:firstName"/>
<span data-bind="text: firstName"></span>
<span data-bind="text: lastName"></span>
</div>
</div>
代码:
var stuff = '[{"firstName":"fred","lastName":"bloggs"},{"firstName":"david","lastName":"frost"}]';
console.log(stuff);
var people = ko.mapping.fromJSON(stuff);
console.log(people());
var viewModel ={};
viewModel.people=people;
ko.applyBindings(viewModel);
只需下载并包含knockout.mapping.js。
答案 1 :(得分:0)
这对你有帮助吗?
var OneStuff = function (data) {
this.ABC = ko.observable(data.ABC);
this.XYZ = ko.observable(data.XYZ);
this.Status = ko.observable(data.Status);
};
self.Stuff = ko.observableArray(ko.utils.arrayMap(data.Stuff, function (oneStuffData) {
return new OneStuff(oneStuffData);
}));
这将使各个属性可观察。
推动:
self.Stuff.push(new OneStuff({ ABC: self.ABCInput(), XYZ: self.XYZInput(), Status: self.StatusInput()}));