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

时间:2012-04-01 00:22:28

标签: javascript data-binding knockout.js highcharts

我希望在我的视图模型之外访问我的数据。所以我创建了一个视图模型对象,但是我无法绑定它的属性。请注意,一切都在我的视图模型中正常工作。

基本上是一个简化的伪代码:

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等。请帮助编程爱好者!非常感谢提前!

1 个答案:

答案 0 :(得分: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/

如果这不是你想要的,请告诉我!