2012-11-05 58 views
0

我剛開始一個項目,我正在嘗試爲我的viewmodel綁定使用knockout。但是我有一個問題,我無法讓視圖模型對選擇框視圖中的更改(通過手動訂閱)做出反應。Knockout手動訂閱不會被觸發

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」,但它永遠不會發生。我是否完全錯了?

我創建了一個小提琴來重現問題here

任何幫助,將不勝感激!

/BR Vinblad

回答

1

你有約束力和視圖模型
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/

+0

謝謝你,謝謝你,謝謝你。花了2天的時間解決這個問題! – Vinblad

+0

快速跟進問題。是否有可能獲得選擇框更改爲的對象而不僅僅是項目的ID? – Vinblad

+1

@Vinblad不在'