0

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/

4

1 回答 1

0

从用户体验的角度不知道你想要实现什么,我不确定你想要实现什么。

你看过这个ko教程吗?它向您展示了如何构建代码以便能够添加新项目

http://learn.knockoutjs.com/#/?tutorial=collections

于 2013-09-19T09:43:04.513 回答