Knockout,Require,Sammy和每个页面的视图模型 - 我如何使其工作?

Nor*_*ert 5 javascript sammy.js requirejs knockout.js

我有一个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');
});
Run Code Online (Sandbox Code Playgroud)

如何将其他视图模型绑定到其他页面?

我还尝试ko.applyBindings为每个页面添加一个单独的内容this.get,当我切换回已经应用了这些绑定的页面时,这会引发错误.

PW *_*Kad 2

http://jsfiddle.net/PgLgz/4/

好吧,我回到小提琴并清理了所有代码,以有效地向您展示我的答案的含义 -

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

请记住,尽管在小提琴中我无法真正利用 Sammy.js (我不会更改视图或导航),并且基本上没有理由使用 Require.js 因为它只是一个示例,并且我放置了所有视图模型在同一个 JS 文件中。

由于您使用的是 Sammy 和 Require,因此您需要获取此代码并将其在功能上应用到您的网站,或者在某处发布更多代码。