2012-08-16 71 views
4

我使用的是淘汰賽映射插件,以前我都會設定一個訂閱像這樣Knockoutjs - 與映射插件訂閱

self.selectedProduct.subscribe(function (name) { 

} 
    but I'm unsure of how to do this in this format below. The message I get is 

「丟失:物業編號後」

var viewModel = { 

    products: ko.mapping.fromJS([]), 
    productOptions: ko.mapping.fromJS([]), 
    productOptions.subscribe = function (name) { 
     alert('somthing change'); 
    }, 
    loadInitialData: function() { 
     ko.mapping.fromJS(serverData, viewModel.productOptions); 
    } 
    } 

回答

5

如果您將視圖模型定義爲對象字面值,則不能像進行內聯操作那樣進行函數調用。您必須在創建視圖模型之後執行此操作,或以不同方式創建視圖模型。

如果你做了以後,那麼它看起來是這樣的:

var viewModel = { 
    products: ko.mapping.fromJS([]), 
    productOptions: ko.mapping.fromJS([]), 
    loadInitialData: function() { 
     ko.mapping.fromJS(serverData, viewModel.productOptions); 
    } 
    }; 

    viewModel.productOptions.subscribe = function (name) { 
     alert('somthing change'); 
    }; 

,如果您使用一個構造函數您的視圖模式,那麼它看起來像:

var ViewModel = function() { 
    this.products = ko.mapping.fromJS([]); 
    this.productOptions = ko.mapping.fromJS([]); 
    this.productOptions.subscribe = function(name) { 
     alert("something change"); 
    }; 

    this.loadInitialData = function() { 
     ko.mapping.fromJS(serverData, this.productOptions); 
    }; 
}; 


var viewModel = new ViewModel(); 
+0

多謝! – MikeW 2012-08-16 03:00:24