5

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');
});

他のビュー モデルを他のページにバインドするにはどうすればよいですか?

ko.applyBindingsまた、内のページごとに別の を追加しようとしましたthis.getが、これらのバインディングが既に適用されているページに切り替えると、エラーがスローされました。

4

1 に答える 1

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());

ただし、フィドルでは Sammy.js を実際に利用することはできず (ビューを変更したりナビゲートしたりしていません)、Require.js を使用する理由は本質的にないことを覚えておいてください。同じJSファイルで。

Sammy と Require を使用しているため、このコードを取得してサイトに機能的に適用するか、より大きなコードをどこかに投稿する必要があります。

于 2013-07-21T15:14:42.383 に答える