1

主なアイデア:コントローラーがモデルのプロパティを正常に更新した後、子ビューを閉じるビューメソッドを呼び出したいと思います。

レンプレート:

<a {{action showUpdate href=true target="view"}}>update</a>

   {{#if view.isUpdate}}   
        {{#view App.UpdateView}}   
            ...here is a form
            <button {{action update}}>Send</button>
        {{/view}}   
    {{/if}}

意見:

App.MainView = Ember.View.extend({
  templateName: 'update',
    isUpdate: false,
    showUpdate: function() {
        this.set('isUpdate', !this.get('isUpdate'));
    }
});

App.UpdateView= Ember.View.extend();

コントローラ:

App.MainController = Ember.Controller.extend({
   updateCon: function() {
               do something
   },
       ...

ルーター:

 update: function(router, evt) {
    router.get('mainController').updateCon();
    //router.get('mainController.view').showUpdate(); <-- doesnt work
 }

そのため、コントローラーが正常に機能した後、ルーターでこれを呼び出そうとしましたが、機能しません。

Cannot call method 'showUpdate' of null 

それは正しいアプローチですか?はいの場合:何が欠けていますか?いいえの場合:コントローラーが何かをしたときにビューを変形するにはどうすればよいですか?

4

1 に答える 1

5

制御フロー ロジックは、コントローラーに適しています。ビューを状態から解放しておくことは一般的に良い考えであり、コントローラーはビューについて認識すべきではありません。更新フラグと関数をコントローラーに移動し、Handlebars テンプレートでコントローラーをターゲットにすることができます。ビューのハンドルバー テンプレートは次のようになります。

<a href="#" {{action showUpdate target="controller"}}>update</a>
{{#if isUpdated}}
    ...
{{/if}}

次に、コントローラーには更新ロジックがあります。

App.MainController = Em.Controller.extend({
    isUpdated: false,
    showUpdate: function() {
        this.set('isUpdated', !this.get('isUpdated'));
    }
});

ビューはテンプレート名だけになりました。

App.MainView = Em.View.extend({
    templateName: 'update'
});
于 2012-12-18T00:54:42.913 に答える