jsFiddle:http: //jsfiddle.net/Piercy/mD4kG/
所以我最近开始使用 knockout.js。我已经开始考虑它,但在以下情况下苦苦挣扎。
我有以下模型和视图模型结构:
function ViewModel() {
var self = this;
self.Emails = ko.observableArray([]);
self.AddEmail = function() {
// make ajax call here
self.Emails.push(new EmailModel(data));
};
}
function EmailModel(data) {
this.Id = data.Id;
this.Name = data.Name;
this.Subject = ko.observable(data.Subject);
this.DisplayId = ko.observable(data.DisplayId);
}
我希望 ViewModel.Emails 数组成为 EmailModel 的数组,我的问题是如何创建要插入的新模型。
我想象这样的事情:
<select data-bind="options: Emaillistdata, optionsText: 'Name', optionsValue: 'Id', optionsCaption: 'Choose...', value: DisplayId"></select><br /><br />
<input type="text" data-bind="value: Name"/><br />
<input type="text" data-bind="value: Subject"/><br />
<button data-bind="click: AddEmail">Add Email</button>
但是,这样做意味着 Name、Subject 和 DisplayId 绑定需要在 ViewModel 中(它们不是)。此外,我不得不将这些添加到 ViewModel 中似乎很奇怪。我有点期待能够单击按钮并拥有一个数据变量,我可以只执行 data.Name、data.Subject 和 data.DisplayId 并且这些变量没有绑定到任何模型,它们只是提交,因为我已经将它们命名为这样还是什么?然后我可以将它们添加到数组中并使它们成为 ViewModel 的一部分。
我可以使用标准 JS 完成所有这些,然后将其添加到模型中,但是当其他所有内容都使用淘汰赛时,这似乎也很奇怪。然而,也许这就是答案?
jsFiddle:http: //jsfiddle.net/Piercy/mD4kG/