0

こんにちは、あなたの答えに感謝します! Ember とその構造を理解しようとしています。

そして、これが私が立ち往生している場所です: Web アプリ (モーダルビュー) でいつでもどこでも追加できるビューがあります。このビューを特定のコントローラーにリンクして、イベント、状態、およびその他の動作を処理したいと考えています。

しかし、それが可能な方法が見つかりませんでした!これはアプリケーションの構造上のエラーですか、それとも別の場所から発生した問題ですか? (自分?)

これがコードの関連部分です。

/views/post_news_popup.js

App.PostNewsPopupView = Ember.View.extend({
    templateName: '_post-news',
    close: function() { /*...*/ },
    save: function() { /*...*/ }
});

index.html

{{view App.PostNewsPopupView}}

...

<script type="text/x-handlebars" data-template-name="_post-news">
    <form {{ action "save" on "submit"}}>
        {{view Ember.TextField valueBinding="name" placeholder="Fill in a name..."}}
        {{view Ember.TextArea valueBinding="description" placeholder="Fill in a description..."}}
        <button {{action 'close'}}>Cancel</button>
        <button>Post news</button>
    </form>
</script>

controllers/post_news_controller.js

App.PostNewsPopupController = Ember.ObjectController.extend({
    actions: {
        close:function() { /*...*/ },
        save:function() { /*...*/ }
    }
 });

PostNewsPopupController を PostNewsPopupView にリンクする方法が見つかりませんでした。いろいろ試してみましたが、コントローラーの関数もビューの関数も呼び出されませんでした。

ルートを参照するとコントローラーが自動的に設定されることはわかっていますが、ここには特定のルートがなく、そのすべてのコードを ApplicationController に入れたくありません。

私を助けてくれてありがとう、質問がばかげていたらごめんなさい!:D

4

2 に答える 2

1

現在ビュー ヘルパーを使用しているテンプレートに接続されたルートに次のコードを追加する必要があります (名前は知りません :-):

これをルートに追加します。

renderTemplate: function(controller, model) {
    this._super(controller, model);

    this.render('postNewsPopup', {
      outlet: 'modalOutlet',
    });
}

ビューを追加するテンプレートにアウトレットを追加します。

{{outlet modalOutlet}}

これにより、PostNewsPopupView が PostNewsPopupController に接続された modalOutlet にレンダリングされます。

詳細情報:

render メソッドは、より多くの引数を取ります。render メソッドの完全な例を次に示します。

this.render('your', {   // the template/view to render
  into: 'index',          // the template to render into
  outlet: 'someOutlet',       // the name of the outlet in that template
  controller: this.controllerFor("another")  // the controller to use for the template
});

これにより、タイプApp.YourViewのビューが、 someOutletという名前のアウトレットを持つindex テンプレートにレンダリングされます。ビューはApp.AnotherControllerのコントローラー インスタンスに接続されます。

于 2013-09-04T19:25:11.027 に答える
1

以下が役立つかどうかを確認してください。ビューを宣言するときにコンテキストを指定します。

App.PostNewsPopupView = Ember.View.extend({
    templateName: '_post-news',
    controller:App.PostNewsPopupController.create()
});

App.PostNewsPopupController = Ember.ObjectController.extend({
    actions: {
        close:function() { /*...*/ },
        save:function() { /*...*/ }
    }
 });
于 2013-09-04T19:46:43.390 に答える