Javascript 每个页面的Knockout、Require、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

我有一个KO应用程序,我的每个页面都有一个单独的视图模型,可以处理该页面上需要的所有操作(加载、添加、编辑、删除等)。我已经设法使用RequireJS将代码分割成多个模块,但是我无法找到一种方法,让多个视图模型使用Sammy同时工作

这是我目前在
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感兴趣,它是一个基本上为您将所有这些东西捆绑在一起的框架。