Ember.js 将控制器链接到动态添加的视图

Ember.js 将控制器链接到动态添加的视图,ember.js,Ember.js,嗨,非常感谢你的回答! 我试图了解余烬及其结构 这就是我一直坚持的地方:我有一个视图,可以随时随地添加到我的web应用程序中(模式视图)。我想将此视图与特定控制器链接,以处理事件、状态和其他行为 但我不知道这怎么可能!这是我的应用程序结构中的错误还是来自其他地方的问题?(我?) 下面是代码的相关部分 /views/post\u news\u popup.js App.PostNewsPopupView = Ember.View.extend({ templateName: '_post-

嗨,非常感谢你的回答! 我试图了解余烬及其结构

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

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

下面是代码的相关部分

/views/post\u news\u popup.js

App.PostNewsPopupView = Ember.View.extend({
    templateName: '_post-news',
    close: function() { /*...*/ },
    save: function() { /*...*/ }
});
App.PostNewsPopupController = Ember.ObjectController.extend({
    actions: {
        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>
我没有找到将PostNewsPopupController链接到PostNewsPopupView的方法。 我尝试了很多方法,但控制器的函数和视图的函数都没有被调用

我知道当浏览到某个路由时,会自动设置控制器,但这里没有特定的路由,我不想将所有代码都放在ApplicationController中


谢谢你帮我,如果问题是。。。愚蠢D

您应该将以下代码添加到连接到模板的路由中,您当前正在该模板中使用视图辅助对象(我不知道其名称:-):

将此添加到您的路线中:

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

    this.render('postNewsPopup', {
      outlet: 'modalOutlet',
    });
}
{{outlet modalOutlet}}
将插座添加到要添加视图的模板中:

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

    this.render('postNewsPopup', {
      outlet: 'modalOutlet',
    });
}
{{outlet modalOutlet}}
这将把PostNewsPopupView呈现到连接到PostNewsPopupController的modalOutlet中。

更多信息:

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

    this.render('postNewsPopup', {
      outlet: 'modalOutlet',
    });
}
{{outlet 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.PostNewsPopupView = Ember.View.extend({
    templateName: '_post-news',
    controller:App.PostNewsPopupController.create()
});

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

您的两种解决方案都有效!!我尝试过类似的方法,但我认为我的控制器是在我的视图之后声明的。我改变了依赖项的顺序,现在它可以正常工作了!谢谢你非常有帮助的回答!这样,您将无法访问控制器,因此无法为其分配内容(没有黑客攻击)。所以这对我来说很没用。事实上,在进一步阅读/编码/观看之后。。。您的解决方案确实是最“先进”的解决方案,并且由于其灵活性而最受推荐!那时候我是为你移民的。也非常感谢您的额外解释!您的两种解决方案都有效!!我不知道这样的解决方案,但我认为它将对我的web应用程序的继续非常有帮助!谢谢!这个解决方案听起来也更被EmberJS“接受”。事实上,以前的解决方案在中没有很好地检测到。这个看起来有点难,但实际上更好。谢谢你们两位!