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

UXの観点から何を達成しようとしているのかを知らなければ、何を達成しようとしているのかわかりません。

この ko チュートリアルを見たことがありますか。新しいアイテムを追加できるようにコードを構成する方法を示します

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

于 2013-09-19T09:43:04.513 に答える