4

オブザーバブルのオブザーバブルオブジェクトを作りたいです。例えば:

        var Project = function(id, name, custId) {
            this.id = ko.observable(id);
            this.name = ko.observable(name);
            this.custId = ko.observable(custId);
        }

        var viewModel = function() {

                    this.newUpProj = ko.observable(new Project(null,null,null));
            ...
            }

このようなもの...私は観察可能になりたいのですnewUpProjectが、それは観察可能であるためのプロパティです。私も試しましたthis.newUpProj = ko.mapping.fromJS(new Project());

Edit1:オブジェクトを作成しますが、そのプロパティ(id、name ...)は監視可能ではありません...

Edit2:htmlで使用:

<div class="modal-body">
                <p><input type="text" id="projNameTx" data-bind="value: newUpProj.name()" /></p><br>
                <p><select data-bind="options: customers, optionsCaption: 'Choose...', value: newUpProj.custId(), optionsText: 'name', optionsValue: 'id'" 
                    size="1"></select></p>

            </div>
            <div class="modal-footer">
                <button class="btn" data-bind="click: clearModal" aria-hidden="true">Close</button>
                <button class="btn btn-primary" data-bind="click: updateFlag() ? updateProject : addProject, enable: newUpProj.custId() && newUpProj.name()">Save</button>
            </div>

正しい値が入力と選択に読み込まれますが、変更がモデルに適用されないため、入力が空の場合 (たとえば)、[保存] ボタンが無効になることはありません。

4

2 に答える 2

5

これでなんとかできました: http://jsfiddle.net/wF7xY/1/

var Model = function() {
    this.data = ko.observable({}); // It doesn't work
};

var Data = {
    field1: 'test1',
    field2: 'test2'
};

var model = new Model();
ko.applyBindings(model);

ko.mapping.fromJS(Data, {}, model.data);
model.data.valueHasMutated();

HTML:

<div data-bind="text: data().field1 ? data().field1() : ''"></div>

助けてくれてありがとう。

于 2013-02-12T10:08:04.323 に答える
5

おそらく、バインディングで newUpProj を実行する必要があるだけですか?

enable: newUpProj().custId() && newUpProj().name()

それができない場合は、custId と name の状態に応じて true または false に設定された計算されたオブザーバブルを作成してみてください。

于 2013-02-11T16:18:32.237 に答える