Knockout.js调用方法在视图模型外

问题描述:

我想让我的数据在我的视图模型之外访问。所以我创建了一个视图模型对象,但我无法绑定它的属性。请注意,我的视图模型中的一切正常工作。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

我仍然不是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