template link ember component ember.js handlebars.js

ember.js - link - ember js template



¿Es posible usar la función en manubrios#if? (4)

Podrías crear un ayudante de manubrio personalizado para hacer esto.

Tengo un objeto controlador que es como:

MyApp.objController = Ember.ArrayController.create({ init: function(data) { data.isValid = function() { return (data.validity === "valid"); } this.pushObject(MyApp.MyObj.create(data)); } });

Mi opinión es como:

{{#each MyApp.objController}} {{#if isValid}} <some markup> {{else}} <some other markup> {{/if}} {{/each}}

Asumí que el condicional if en Handlebars acepta valores y funciones, pero este no parece ser el caso. ¿Es realmente posible, y lo estoy haciendo mal?


Si define isValid como una property , puede usarlo en su declaración if sin crear una ayuda personalizada para Handlebars, consulte http://jsfiddle.net/pangratz666/Dq6ZY/ :

Manubrios :

<script type="text/x-handlebars" data-template-name="obj-template" > {{view Ember.TextField valueBinding="age" }} {{#if isValid}} Si Si. {{else}} Nope! {{/if}} </script>​

JavaScript :

App.MyObj = Ember.Object.extend({ isValid: function() { return this.get(''age'') >= 18; }.property(''age'') }); Ember.View.create({ templateName: ''obj-template'', controller: App.MyObj.create({ age: 21 }) }).append();

1.


Prueba esto:

<ul> {{#each subsites}} {{#if this}} <li>{{{WhatIsTheSiteFor this}}}</li> {{else}} <li>no found</li> {{/if}} {{/each}} </ul>

aquí está la función auxiliar para WhatIsTheSiteFor:

Handlebars.registerHelper(''WhatIsTheSiteFor'', function(sitename) { var subsitename = '''', sitenamestr = ''''; $.each(sitename, function(i, item){ sitenamestr += item; return sitenamestr; }); if(sitenamestr===''s.gbin1.com''){ subsitename = ''<a href="http://''+ sitenamestr +''">GB搜索引擎</a>''; }else if(sitenamestr===''m.gbin1.com''){ subsitename = ''<a href="http://''+ sitenamestr +''">GB手机阅读</a>''; }else if(sitenamestr===''rss.gbin1.com''){ subsitename = ''<a href="http://''+ sitenamestr +''">RSS消息订阅</a>''; } return subsitename; });

Aquí está la demostración: http://www.gbin1.com/gb/networks/uploads/71bb1c1e-0cd3-4990-a177-35ce2612ce81/demo6.html


Manillar si las declaraciones solo se comparan si existe un valor, si es un valor falso (es decir, no existe, 0, una cadena vacía, etc.). Tienes que escribir una función de ayuda personalizada.

Podrías hacerlo así

Handlebars.registerHelper(''isValid'', function (value, options) { if (value == "valid") { return options.fn(this); } return options.inverse(this); });

Esto registra un ayudante de bloque. Si el valor que aprueba se evalúa como "válido", devuelve la plantilla que sigue al auxiliar con los datos actuales. Si no se evalúa como válido, devuelve la plantilla que sigue a la declaración else con los datos actuales.

Luego, en su plantilla, podría usarlo así

{{#each MyApp.objController}} {{#isValid validity}} <some markup> {{else}} <some other markup> {{/isValid}} {{/each}}

De lo contrario, si desea cumplir con el espíritu de los manubrios y hacer una plantilla ''sin lógica'', establezca un indicador antes de representar la plantilla indicando si esos datos son válidos o no, y luego use los manubrios si es un ayudante con el indicador.

También podría configurar una función genérica para manejar este y otros casos. Ver mi respuesta en Operador lógico en un condicional handlebars.js {{#if}} para un ejemplo para un if genérico (similar a la respuesta anterior)