0

Index というオブジェクトがあります。

function Index() {
    var self = this;
    self.name = ko.observable("Kiwanax");
}

そして、私は次のようなViewModelを持っています:

function IndexViewModel() {

    var self = this;
    var index = new Index();

    self.content = index;
    self.default = index;
}
ko.applyBindings(new IndexViewModel());


//-------------------------------------------
<input type="text" data-bind="text: content.name" />

ポイントは、ある時点で、フォームをデフォルト値にリセットしたいということです。これは、現在のビューモデルの値をデフォルトの変数値に変更することを意味します。しかし、私はこれを行う方法を理解していません。

self.resetForm = function() {
    // How to update the current content variable to default variable values?
    // I think in something like that below:

    self.content = self.default;
}

皆さんありがとう!

4

2 に答える 2

2

入力には値バインディングを使用する必要があるため、フォームには何も表示されません。

デフォルト値については、エクステンダーを作成することをお勧めします。

ko.extenders.defaultValue = function(target, option){
    target.reset = function(){
        target(option);
    }        
    return target;
}

そして、次のように使用します。

self.name = ko.observable("Kiwanax").extend({defaultValue:"defaultValue"});

デフォルトの通話にリセットするには:

self.name.reset();

すべてのコードをいじる: http://jsfiddle.net/25ECB/3/

編集: 多くのフィールドを制御するには、ko マッピングを使用し、create オプションを使用してエクステンダーを追加できますが、resetAll を簡単に実行できるため、以下の実装をお勧めします (フィドルの更新: http://jsfiddle.net/ 25ECB/6/ )。

function Index() {
    var self = this;
    var lotsOfProps = [
        {
            name:"name1",
            value:"initialValue1",
        },
        {
            name:"name2",
            value:"initialValue2",
        },      
        {
            name:"name3",
            value:"initialValue3",
        }                
        ];

    ko.utils.arrayForEach(lotsOfProps, function(prop){
        self[prop.name] = ko.observable(prop.value).extend({defaultValue:prop.value});
    });
    //self.name = ko.observable("Kiwanax").extend({defaultValue:"defaultValue"});

    self.resetAll = function(){
        ko.utils.arrayForEach(lotsOfProps, function(prop){
            self[prop.name].reset();
        })
    }
}


function IndexViewModel() {

    var self = this;
    var index = new Index();

    self.content = index;

    self.resetForm = function() {
        // How to update the current content variable to default variable values?
        // I think in something like that below:
        self.content.resetAll();
    }
}
于 2013-11-06T18:26:28.330 に答える
1

デフォルト値を持つ単純な js オブジェクトを使用します。

function Index(data) {
   var self = this;
   self.name = ko.observable(data.name);
}

function IndexViewModel() {
    var self = this;
    self.defaultData = {name: "Kiwanax"};
    self.index = new Index(defaultData);

    self.resetForm = function() {
        self.index = new Index(defaultData);
    }
}

resetForm を呼び出すと、デフォルト データで Index オブジェクトが再作成されます。

于 2013-11-06T19:39:00.690 に答える