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/