0

ビューモデルのバインディングにノックアウトを使用しようとしているプロジェクトを開始しました。しかし、選択ボックスのビューで行われた変更に(手動サブスクリプションを介して)ビューモデルを反応させることができないという問題があります。

var viewModel = function() {
   var self = this;
   self.project = ko.observable();
   self.contractBorders = ko.observable();

   self.contractBorders.subscribe(function (newvalue) {
       alert('something changed!');
   });
};

viewModel.load = function() {
var data = {"project":{"name":"Project XYZ",
"number":338,"id":1,"isNew":false},"contractBorders":[{"name":"Border 1 grund","id":1},   
{"name":"Border 2","id":2},{"name":"Border 3","id":3}]}

viewModel.loadView(data);

};
viewModel.loadView = function(data) {
    self.project = ko.mapping.fromJS(data.project);
    self.contractBorders = ko.mapping.fromJS(data.contractBorders);
    ko.applyBindings(viewModel);    
};

viewModel.load();

「self.contractBorders.subscribe」が実行されることを期待していますが、実行されることはありません。私はそれを完全に間違っていますか?

ここで問題を再現するためにフィドルを作成しました

どんな助けでもいただければ幸いです!

/BRヴィンブラッド

4

1 に答える 1

1

バインディングとviewModelに多くの小さな間違いがあります
1)

viewModel.loadView = function(data) {
    viewModel.project = ko.mapping.fromJS(data.project);
    viewModel.contractBorders = ko.mapping.fromJS(data.contractBorders);
    ko.applyBindings(viewModel);    
};  

2)

var viewModel = new function() {  

3)

 <div class="span2">
                <select  

4)

<input type="text" id="name" name="name" data-bind="value: project().name" />

http://jsfiddle.net/6zzSy/22/

ここで、観察可能な値を追加しますselectedBorder
-http://jsfiddle.net/6zzSy/24/

ここで私はあなたのコードを最適化します
http://jsfiddle.net/6zzSy/25/

于 2012-11-05T20:29:08.403 に答える