Me gustaría almacenar diferentes objetos en la misma matriz de contenido de controlador y renderizar cada uno utilizando una plantilla de vista apropiada, pero idealmente la misma vista.Seleccionar vista de plantilla por tipo de modelo/valor de objeto usando Ember.js
Estoy saliendo objetos de la lista usando el siguiente código. Actualmente son idénticos, pero me gustaría poder usar otros diferentes.
<script type="text/x-handlebars">
{{#each App.simpleRowController}}
{{view App.SimpleRowView class="simple-row" contentBinding="this"}}
{{/each}}
</script>
Abajo figura una versión reducida de la vista. Las otras funciones que no he incluido podrían usarse con cualquiera de los objetos, independientemente del modelo. Entonces, idealmente, tendría una vista (aunque he leído algunos artículos sobre mixinas que podrían ayudar si no fuera así).
<script>
App.SimpleRowView = Em.View.extend({
templateName: 'simple-row-preview',
});
</script>
Mis primeras pruebas en diferentes tipos de objetos que permiten terminó con un montón de condiciones dentro de 'simple fila-preview' - es un aspecto horrible!
¿Hay alguna manera de controlar dinámicamente el templateName o la vista utilizada al iterar sobre mi matriz de contenido?
ACTUALIZACIÓN
Muchas gracias a los dos demandados. El código final en uso en la vista está debajo. Algunos de mis modelos son similares, y me gustó la idea de poder cambiar de plantilla (o una especie de 'estado') en mi aplicación.
<script>
App.SimpleRowView = Em.View.extend({
templateName: function() {
return Em.getPath(this, 'content.template');
}.property('content.template').cacheable(),
_templateChanged: function() {
this.rerender();
}.observes('templateName'),
// etc.
});
</script>
Esta es una muy buena respuesta, pero, por desgracia, este es el caso donde la vista no se agrega a través de un auxiliar de manubrio sino como una clase que se recoge automágicamente por ascua. En ese caso, no podrá acceder a 'content' ni a' controller' (se trata aquí: http://stackoverflow.com/questions/15337065/how-to-get-any-controller-instance-from-init- método-de-una-vista). Mi solución en este caso era tener un método que observara el 'controller.content' y establecer la vista correspondiente en esta función a través de' this.set ('currentView', view) ' – vanthome