3

我正在尝试根据模型中的特定值以编程方式将不同的模板渲染到命名的插座中。

下面是两个 JSBin 示例:

这个显示了基本结构,但具体的渲染代码被注释掉了。 http://jsbin.com/OhegexO/1/

但是当我尝试在我的路线中使用 renderTemplate 方法时它不起作用

http://jsbin.com/OhegexO/2/

我在控制台中看到以下错误

Error while loading route: TypeError {}

Uncaught TypeError: Cannot call method 'connectOutlet' of undefined 

我似乎可以弄清楚这一点。用例是我想根据模型中的某些参数使用不同的模板。

4

1 回答 1

3

诚然,我对渲染到命名插座不是很熟悉,但它似乎不会渲染到尚未渲染的插座。话虽如此,您可以允许产品模板正常渲染(不要覆盖 renderTemplate),然后将编辑表单延迟渲染到产品模板中(参见第二个 jsbin),而不是从 renderTemplate 执行它是可能的。这有点尴尬,所以如果你想为了它而劫持renderTemplate,请参阅this first jsbin。它们都涉及等待产品模板呈现,然后呈现它。

而且我相信如果你覆盖 renderTemplate 钩子,它会跳过默认渲染,因此永远不会渲染产品模板。经过进一步调查,这是真的,如果你超级它,它也可以。顺便说一句,this._super() 表示也运行此方法的默认实现。

http://jsbin.com/ujiKire/5/edit

使用设置控制器:

http://jsbin.com/OvONejo/1/edit

  setupController: function(controller, model){
     var templateEditForm = model.get('editform');
     var templateInto = 'product';
     var templateOutlet = 'editform';

     console.log("render the [%s] form into the [%s] template, using the [%s] outlet",templateEditForm, templateInto, templateOutlet);    

     // Why does this code not work

     var self = this;
     Ember.run.later(function(){
     self.render(templateEditForm, {   // the template to render
       into: 'product',                // the template to render into
       outlet: templateOutlet,              // the name of the outlet in that template
       controller: controller        // the controller to use for the template
     });
     },1);
   }
于 2013-08-27T04:11:35.077 回答