【发布时间】:2016-03-08 19:21:56
【问题描述】:
在 Knockout 的帮助下,我有一个显示项目的简单列表视图。一组 'Things' 被硬编码到一个数组中,并且 Knockout 在页面加载时列出它们。到目前为止它运行良好。
现在,我想添加一个新函数:newFunc()。将在函数中创建一个具有属性但没有名称的新项目。如果用户愿意,可以稍后将该项目添加到列表中。然后,用户可以为项目命名。
问:在这种情况下,我如何(或者我可以)使用构造函数'Item'在新函数中创建一个新项目? “Item”函数需要一个参数“item”,但在新函数中,我无法传递参数,因为正在创建新项目并且没有给出名称。我应该如何以不同的方式思考和编码来实现所描述的功能?
任何帮助和提示将不胜感激。
// HTML //
<ul data-bind='foreach: itemList'>
<li data-bind='text: name'></li>
</ul>
// 脚本 //
var Things = [
{ name: 'name1', property: 'prop1' },
{ name: 'name2', property: 'prop2' },
...
];
var Item = function(item) {
this.name = item.name;
this.property = item.property;
};
// The new function in Question
var aNewItem;
newFunc = function() {
// I'd like to create an 'Item' with a given property, but w/o a name.
aNewItem = new Item(); // ???
aNewItem.property = 'propertyN'; // **Edit**: also a variable set by user or callback.
};
var viewModel = function {
self = this;
self.itemList = ko.observableArray();
Things.forEach(function(item) {
self.itemList.push(new Item(item));
});
};
ko.applyBindings(new viewModel());
【问题讨论】:
-
不是先创建item再设置属性,就不能只收集属性,然后调用构造函数吗?否则,您必须删除
item参数并在实例化后显式设置属性。 -
是的,我认为它当然可以成为一个解决方案。将数据收集到变量或数组中,稍后根据需要与构造函数一起使用。谢谢你的好建议!我不认为删除
item参数可能不是最好的解决方案,因为我正在寻找可扩展的东西并从数组Things中读取数据。