0

私は概念を学び始めました。このためMarionette.Viewに、1つの属性を持つモデルを作成し、デフォルト値を割り当てました。

HTMLファイルにドロップダウンリストがあります。それが変更されるたびに、関数名がmyfunction.Inside myFunctionI changed model 属性値としてトリガーされます。

属性値が自動的に変更されるたびに、別の関数がトリガーされます。そのイベントは内部に記述しましたが、機能Marionette.CompositeViewしていません。

以前に私はそこで同じことをしmyModel.onましたが、うまくいきました.しかし、それmodelEventsMarionette.CompositeView.

次のコードを確認してみましょう。

var mymodel=Backbone.Model.extend({
defaults:{
    "name":"oldValue"
}
});
var mymodelObj=new mymodel();
//marionette.View code
var backView=Backbone.Marionette.CompositeView.extend({
events:{
    "change #pop1":"myFunction"
},
myFunction:function(){
    mymodelObj.set({name:"updatedValue"})
},
modelEvents:{
    "change:name":"myFunction1"
},
myFunction1:function(){
    alert("Hi");
}
 });
//creating instance
var backViewObj=new backView({el:$("#sidebar")});

どうすればこれを修正できますか。

Marionette.js現在、バックボーン アプリケーションのどこが役立つかを理解しようとしています。

4

2 に答える 2

0

私が間違っていなければ、モデルはあなたが作成したビューに添付されていません。modelEvents をトリガーするには、CompositeView にモデル属性が必要です。このためには、CompositeView の初期化中にモデルを指定する必要があります。

var backViewObj=new backView({el:$("#sidebar"), model : mymodelObj});
于 2013-11-05T08:08:12.773 に答える
0

backViewこれを行うには、次のように作成するときにモデルを渡す必要があります。

var backViewObj = new backView({ el:$("#sidebar"), model: myModel });

Marionette は、コンストラクターの呼び出しをオーバーライドdelegateEventsし、オブジェクトをモデルにBackbone.View委譲することでこれを実現します。modelEvents

Marionette.bindEntityEvents(this, this.model, Marionette.getOption(this, "modelEvents"));

上記のコメントに基づいて、 Backbone.Marionette が提供するさまざまなタイプのビューについて不明であると思います。より多くのモデル インスタンスを渡す方法を尋ねているためです。マリオネットを使い始めた時期も不明でした。


Marionette.ItemView単一のモデルを表します。

Marionette.CollectionViewコレクションを表し、コレクションMarionette.ItemView内のすべてのモデルに対して をレンダリングします。テンプレートをレンダリングする機能はありません。

Marionette.CompositeViewモデルとコレクション (ツリー構造の葉と枝) の両方を表します。これは再帰的なデータ構造用ですが、CompositeView を使用してテンプレート (テーブル ヘッダーなど) をレンダリングしitemViewContainer、itemViews を特定の要素に配置するために使用できます。

CompositeView で複数のモデルをレンダリングできるようにする場合は、1 つのモデルではなく、モデルのコレクションを CompositeView に渡す必要があります。

于 2013-11-05T18:41:15.647 に答える