2012-04-01 30 views
4

我想讓我的數據在我的視圖模型之外訪問。所以我創建了一個視圖模型對象,但我無法綁定它的屬性。請注意,我的視圖模型中的一切正常工作。Knockout.js調用方法在視圖模型外

基本上是一個簡化的僞代碼:

function Users() { 
    name; 
    date; 
} 

function userHealthModel() { 
    function createUsers() { new Users[] }; 
} 

self.userModel = ko.observable(new userHealthModel()); 
self.userModel.createUsers(); 

如果我稱之爲createUsers方法我的模型在我的綁定工作正常。

這裏是一個的jsfiddle,請注意我的問題是在JS結束所有的方式,我評價它: http://jsfiddle.net/fourgates/jpk22/1/

我是新來的JS和KO。不確定如何使用$ root,$ parent等。請幫助編程愛好者!提前謝謝了!

+0

請問一個具體的問題,而不是隻發佈一大堆「不工作」的代碼。你已經建立了很多,所以你在哪裏掙扎? – Niko 2012-04-01 01:26:42

+0

對不起,請原諒我的懶惰,當我寫這篇文章時,我很疲倦,只是小睡了一下。我用jsfiddle重寫了我的問題。 但基本上我有我的視圖模型以外的viewModel對象的綁定屬性的麻煩。 – 2012-04-01 02:45:05

回答

10

我仍然不是100%肯定,如果我理解你正在試圖做的,但這裏有關於你的提琴代碼的一些想法:

如果您有類似

var self = this; 
全局範圍內的

(=不在函數中),this指向窗口對象。所以這沒有任何意義。

self.userModel = ko.observable(new userHealthModel()); 

創建視圖模型的可觀察性不是必要的 - 您不希望整個模型發生變化,對吧?它將始終保持用戶模型,而不是突然成爲「消息模型」或其他。

如果你想打電話從外面您的視圖模型的方法,只是做一個實例:

var userModel = new userHealthModel(); 
userModel.createUsers(); 

// Use "userModel" to access the methods and properties 
// like you're using "self" inside the view model: 
userModel.users2()[1].userId(5); 

// now apply the binding to THE SAME view model 
ko.applyBindings(userModel); 

http://jsfiddle.net/jpk22/3/

如果這不是你要找的人,讓我知道!

+0

感謝那正是我想要做的!這是有道理的,該模型是不可觀察的。非常感謝你的幫助! – 2012-04-01 17:24:14

相關問題