Javascript 每个页面的Knockout、Require、Sammy和视图模型–;我如何让它工作?
我有一个KO应用程序,我的每个页面都有一个单独的视图模型,可以处理该页面上需要的所有操作(加载、添加、编辑、删除等)。我已经设法使用RequireJS将代码分割成多个模块,但是我无法找到一种方法,让多个视图模型使用Sammy同时工作 这是我目前在Javascript 每个页面的Knockout、Require、Sammy和视图模型–;我如何让它工作?,javascript,knockout.js,requirejs,sammy.js,Javascript,Knockout.js,Requirejs,Sammy.js,我有一个KO应用程序,我的每个页面都有一个单独的视图模型,可以处理该页面上需要的所有操作(加载、添加、编辑、删除等)。我已经设法使用RequireJS将代码分割成多个模块,但是我无法找到一种方法,让多个视图模型使用Sammy同时工作 这是我目前在init.js文件中的设置,它在第一页加载内容。它的工作原理是: require(['jquery', 'ko', 'sammy', 'viewmodels/page1'], function($, ko, sammy, page1) { var p
init.js
文件中的设置,它在第一页加载内容。它的工作原理是:
require(['jquery', 'ko', 'sammy', 'viewmodels/page1'], function($, ko, sammy, page1) {
var page1VM = new page1.ViewModel();
ko.applyBindings(page1VM);
var app = sammy('#wrapper', function() {
this.get('#page1', function() {
page1VM.loadContent();
});
this.get('#page2', function() {
// do nothing yet
});
[...]
this.get('#pageX', function() {
// do nothing yet
});
});
app.run('#page1');
});
如何将其他视图模型绑定到其他页面
我还尝试为this.get
中的每个页面添加一个单独的ko.applyBindings
,当我切换回已经应用了这些绑定的页面时,会抛出一个错误。
好吧,我回到小提琴里,把所有的代码都清理干净,让你明白我的答案是什么意思-
function myViewModel() {
var self = this;
self.message = "hey";
self.page1VM = new page1VM();
self.page2VM = new page2VM();
var app = sammy('#wrapper', function() {
this.get('#page1', function() {
page1VM .loadContent();
});
});
};
ko.applyBindings(new myViewModel());
请记住,尽管在fiddle中,我不能真正使用Sammy.js(我没有更改视图或导航),而且基本上没有理由使用Require.js,因为它只是一个示例,我将所有视图模型放在同一个js文件中
由于您使用的是Sammy,需要将此代码应用到您的站点,或者在某个地方发布更大的代码。如果没有ApplyBinding,它似乎无法工作。也许我做错了什么。这是page1视图模型:是的,您仍然需要应用绑定。我将更新答案,以包括它在applyBindings行中抛出“object not a function”错误。很抱歉响应太晚。你的解决方案奏效了,但在一次失败的尝试后,我再次切换到Durandal,它似乎能更无缝地处理事情。太棒了,你会爱上Durandal的!您可能会对Durandal感兴趣,它是一个基本上为您将所有这些东西捆绑在一起的框架。