2012-02-27 105 views
13

我有這樣定義的淘汰賽視圖模型:設置屬性值之外淘汰賽視圖模型定義

function viewModel() { 
    var self = this; 

    self.myName = ko.observable(); 
    self.myValue = ko.observable("10"); 
}; 

現在我需要改變視圖模型的數值時被點擊一個鏈接,像這樣:

$('a.treeitem').live("click", function (e) { 
    e.preventDefault(); 
    viewModel.myValue("20"); // this line does not work 
}); 

但是,我無法找到設置值的正確方法,鍍鉻控制檯顯示以下信息: 遺漏的類型錯誤:對象功能視圖模型(){...}有沒有方法「myvalue的」

+0

不要使用實際的例子來讀書'活()'不再:)它已被棄用。最好使用'on()'。查看[live()](http://api.jquery.com/live/)頁面獲取更多關於棄用的信息 – soniiic 2012-02-28 10:11:38

+0

不錯!我將我的代碼從live()更改爲on()。謝謝。 – 2012-02-28 10:48:46

回答

22

您可以視圖模型保存爲一個像這樣的變量:

window.vm = new viewModel(); 
ko.applyBindings(vm); 

$('a.treeitem').live("click", function (e) { 
    e.preventDefault(); 
    window.vm.myValue("20"); 
}); 

每當你從window.vm閱讀,你會從視圖模型對象

+0

這正是我正在尋找的。謝謝! – 2012-02-28 10:49:10

+0

很好的答案,謝謝! – 2012-09-02 18:38:30

+0

當試圖用'vm = new vm(listOfObjects);'和'vm.Expired(true);'(換句話說,添加一個布爾值)的形式寫入布爾值時,它會顯示「函數預期「作爲錯誤,純文本可以按照你的描述寫入 – vapcguy 2015-01-16 03:46:44

2

其實,我想做能視圖模型定義中完成,所以我可以在我的代碼改成這樣:

function viewModel() { 
    var self = this; 

    self.myName = ko.observable(); 
    self.myValue = ko.observable("10"); 

    $('a.treeitem').live("click", function (e) { 
     e.preventDefault(); 
     self.myValue("20"); 
    }); 
}; 

現在一切工作正常。有時候,正確的方式真的是是很容易的。

+2

難道你不是指'self.myValue(「20」)? – soniiic 2012-02-28 10:12:23

+0

@soniiic Ups,複製了錯誤的行。編輯。 – 2012-02-28 10:39:52

+2

這看起來有點奇怪。viewmodel的意思是沒有任何依賴關係的用戶界面。接受的答案中的代碼更像MVVM。 – 2012-02-28 19:07:52