我正在创建SPA,我正在使用knockout js来查看模型。我也使用Sammy js进行路由和导航。
我使用learn.knoutoutjs.com作为如何创建SPA的先行者。在这里,他们将主视图模型作为函数:
function mainViewModel() {
// insert other view models in here
Sammy(function () {
// initialise Sammy routes here
});
}
我在代码中使用的是对象而不是函数:
var mainViewModel = {
// insert other view models in here
}
我这样做是出于个人喜好。 ko.applyBindings
对此有用处,我在mainViewModel
附加了一个不同文件中的视图模型,然后通过淘汰将其绑定。
但是,在处理函数时,它会被初始化并运行,因此Sammy(function () {})
被触发。使用var
方法,它不会,我如何让它来执行此操作,因为在Sammy(function () {})
内它需要使用mainViewModel
,但显然它尚未初始化页面加载时。
如何将Sammy
放入var
方法并让其初始化?
我有这段代码:
var personViewModel = {
init: function () {
this.person = ko.observable(new this.personModel({firstname:"callum", lastname:"linington"}));
},
personModel: function (data) {
var self = this;
self.firstname = ko.observable(data.firstname);
self.lastname = ko.observable(data.lastname);
self.fullname = ko.computed(function () {
return this.firstname + " " + this.lastname;
}, this);
},
person: new Object()
};
然后:
var mainViewModel = {
init: function () {
// do sammy stuff
},
personViewModel: personViewModel.init()
}
ko.applyBindings(mainViewModel.init());
但是它说:
未捕获的TypeError:无法解析绑定。绑定值:用: $ root.personViewModel.person消息:无法读取属性 未定义的'personViewModel'
答案 0 :(得分:1)
var mainViewModel = {
init : function(){
Sammy(function () {
// initialise Sammy routes here
});
},
anotherMethod1 : function(){},
anotherMethod2 : function(){}
}
mainViewModel.init();