2013-11-26 2 views
1

Я столкнулся с странной проблемой. У меня есть шаблон статьи. В шаблоне статьи я вызываю {{render "category/new" category}}.Ember.js {{render}} вспомогательная модель неверно установлена ​​

Однако при сохранении новой категории через действие используется неправильная модель. Когда я меняю его на {{render "category/new" this}}, он использует модель статьи. Когда я оставляю часть модели пустой, она также не работает.

Шаблон:

<script type="text/x-handlebars" data-template-name="article"> 
    ((...)) 
    {{render "category/new" category}} // calls the popup for adding a new category 
    ((...)) 
</script> 

<!-- popups --> 
<script type="text/x-handlebars" data-template-name="category/new"> 
    <div class="popup"> 
     <h2>Add new category</h2> 

     Name: {{input type="text" value=name}}<br /> 
     Image: {{view App.UploadFile name="image" file=image }}<img {{bind-attr src=image}}><br /> 
     Category-parent: {{input value=categoryRelation}}<br /> 

     <button {{action 'saveCategory'}}>Save</button> 
     </div> 
</script> 

Router:

// both routes have the render called, it uses the same template 
this.resource('article', {path: '/article/:id'}); 
this.resource('article.new', {path: "/article/new"}); 

Модель:

App.Category = DS.Model.extend({ 
    name: DS.attr('string'), 
    image: DS.attr('string'), 
    categoryRelation: DS.belongsTo('category') 
}); 

App.Article = DS.Model.extend({ 
    name: DS.attr('string'), 
    category: DS.hasMany('category') 
)}; 

контроллера:

App.CategoryNewController = Ember.ObjectController.extend({ 
    actions: { 
     saveCategory: function() { 
      console.log('CategoryNewController saveCategory action'); // gets called 
      console.log(this.get('model')); // the wrong one 
      this.get('model').save(); // saves all categories when using {{render "category/new" category}} 
     } 
    } 
}); 

Пожалуйста, обратите внимание, нет маршрута для категории/новые, потому что она не нужна для {{}} оказать помощник. См: http://emberjs.com/guides/templates/rendering-with-helpers/#toc_specific (смотри таблицу в нижней части страницы)

+0

Похоже, он должен работать. Можете ли вы настроить JSFiddle? – monocle

ответ

2

В статье, category является has-many, поэтому вы устанавливаете модель CategoryNewController в массив Category (если вы не оставили из части, которая создает Category объект, когда пользователь нажимает на что-то новое.)

+1

Я начинаю трещать здесь ... :) Означает ли это, что мне нужно извлечь данные «вручную» в действие «saveCategory»? Я подумал, что возможно иметь отдельную модель для помощника '{{render}}', как указано в руководствах. См.: Http://emberjs.com/guides/templates/rendering-with-helpers/#toc_the-code-render-code-helper. – DelphiLynx

+0

. Вы должны неявным образом указывать модель на '{{render}}' tag: '{{ render "category/new" App.Category}} ', но я не уверен, что он работает так, как вы хотите. – floatdrop

Смежные вопросы