【问题标题】:Knockout.js calling method outside of view model视图模型之外的 Knockout.js 调用方法
【发布时间】:2012-04-01 00:22:28
【问题描述】:

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

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

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

【问题讨论】:

  • 请提出一个具体问题,而不是仅仅发布一大堆不知何故“不起作用”的代码。你已经做好了很多准备,那么你到底在哪里苦苦挣扎?
  • 对不起,请原谅我的懒惰,我写这篇文章的时候很累,只是打了个盹。我用 jsfiddle 重写了我的问题。但基本上我无法在我的视图模型之外绑定我制作的 viewModel 对象的属性。

标签: javascript data-binding knockout.js highcharts


【解决方案1】:

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

如果你有类似的东西

var self = this;

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

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

创建视图模型的 observable 不是必需的 - 您不希望整个模型发生变化,对吗?它将始终保持用户模型,不会突然变成“消息模型”或其他什么。

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

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/

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

【讨论】:

  • 感谢这正是我想要做的!这是有道理的,模型是不可观察的。非常感谢您的帮助!
猜你喜欢
  • 2014-11-20
  • 2016-09-27
  • 2015-10-04
  • 2012-09-19
  • 1970-01-01
  • 2014-01-03
  • 1970-01-01
  • 1970-01-01
  • 2017-09-01
相关资源
最近更新 更多