0

您好,非常感谢您的回答!我正在尝试了解 Ember 及其结构。

这就是我坚持的地方:我有一个可以随时随地添加到我的网络应用程序(模态视图)中的视图。我想将此视图与特定控制器链接以处理事件、状态和其他行为。

但我没有发现这怎么可能!这是我的应用程序结构中的错误还是来自其他地方的问题?(我?)

这是代码的相关部分。

/views/post_news_popup.js

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

索引.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>

控制器/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 方法需要更多参数。这是渲染方法的完整示例:

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。该视图将连接到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 回答