2013-07-21 7 views
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'); 
}); 

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

this.getの各ページに別々のko.applyBindingsを追加しようとしましたが、これらのバインディングがすでに適用されているページに戻ったときにエラーが発生しました。

+3

Durandalは、基本的にこれらのすべてを一緒にバンドルするフレームワークです。 – Tyrsius

答えて

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 and Requireを使用しているため、このコードを使用して機能的にサイトに適用したり、コードの大部分をどこかに投稿する必要があります。

+0

applyBindingsがなければ動作しないようです。たぶん私は間違ったことをしているのかもしれないhttp://snippi.com/s/jwcf5zb – Norbert

+0

はい、まだバインディングを適用する必要があります。回答を更新します。 –

+0

applyBindingsラインで「オブジェクトは関数ではありません」というエラーをスローしています。 – Norbert

関連する問題