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

Phi*_*nan 4 javascript data-binding highcharts knockout.js

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

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

function Users() {
    name;
    date;
}

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

self.userModel = ko.observable(new userHealthModel());
self.userModel.createUsers();
Run Code Online (Sandbox Code Playgroud)

如果我createUsers在模型中调用方法,我的绑定工作正常.

这是一个jsFiddle,注意我的问题一直在JS的结尾,我评论它:http: //jsfiddle.net/fourgates/jpk22/1/

我是JS和KO的新手.不确定如何使用$ root,$ parent等.请帮助编程爱好者!提前谢谢了!

Nik*_*iko 10

如果我理解你想要做什么,我仍然不能100%确定,但是这里有一些关于你小提琴代码的想法:

如果你有类似的东西

var self = this;
Run Code Online (Sandbox Code Playgroud)

在全局范围内(=不在函数中),this指向窗口对象.因此这没有任何意义.

self.userModel = ko.observable(new userHealthModel());
Run Code Online (Sandbox Code Playgroud)

创建一个可观察的视图模型是没有必要的 - 你不希望整个模型改变,对吧?它将始终保持用户模型,而不是突然变成"消息模型"或其他什么.

如果要从外部调用视图模型的方法,只需创建一个实例:

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);
Run Code Online (Sandbox Code Playgroud)

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

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