【问题标题】:Is it possible to pass conditionals or other javascript as arguments in ember handlebars?是否可以在 ember 车把中传递条件或其他 javascript 作为参数?
【发布时间】:2013-12-18 06:27:51
【问题描述】:

我想向我的车把传递一个真/假语句

{{Gd-text-input label="Specify" name="Specify" key="entry.810220554" hideIf="entry.18110 === "Client""}}

如果变量 entry.18110 设置为“客户端”,我希望 hideIf 为真

【问题讨论】:

    标签: javascript ember.js handlebars.js


    【解决方案1】:

    首先,在某处添加这个 -

    Handlebars.registerHelper('ifEqual', function (var1, var2, options) {
        if (var1=== var2) {
            return new Handlebars.SafeString(options.fn(this));
        }
        return new Handlebars.SafeString(options.inverse(this));
    });
    

    那么..

    {{#ifEqual entry.18110 "Client"}}
    {{Gd-text-input label="Specify" name="Specify" key="entry.810220554" hideIf="true"}}
    {{else}}
    {{Gd-text-input label="Specify" name="Specify" key="entry.810220554" hideIf="false"}}
    {{/if}}
    

    这几乎是唯一的方法,因为车把团队专门将大部分逻辑排除在模板之外,因为它通常不属于那里。这是有争议的,因为有时不允许简单的逻辑会使事情变得更加复杂。但是,这是非常可行的。

    【讨论】:

    • 我能否以某种方式将两个参数传递给模板并使用它们来执行测试?
    • 通过模板我假设你的意思是“Gd-text-input”。是的,你可以——只要你能控制 Handlebars 助手。
    • 我厌倦了使用 didInsertElement – 事件来执行此操作,但即使我有四个模板实例,它似乎也只会触发一次。
    • @KristofferNolgren 我认为如果entry.18110 更改模板没有更新,对吗?因为Handlebars.registerHelper 不会创建绑定助手
    • 这行不通,当值改变时会中断。 Ember 车把绑定在上述实现中会出现问题。
    【解决方案2】:

    另一个答案不适用于 Ember Handlebars,对于您的情况,您可以这样做。

    http://emberjs.jsbin.com/agewuxAT/3/edit

    组件

    App.HideableCompComponent = Em.Component.extend({
      isHidden: function(){
        var prop = this.get('hideIfProperty');
        if(!prop) return false;
        // allow lazy comparison? up to you
        return this.get('content').get(prop) == this.get('hideIfValue');
      }.property('hideIfProperty', 'hideIfValue')
    });
    

    模板

    <script type="text/x-handlebars" data-template-name="components/hideable-comp">
      {{#unless isHidden}}
        I am a component I am not hidden!
      {{else}}
        I am hidden
      {{/unless}}
    </script>
    

    用法

    {{hideable-comp content=model hideIfProperty='length' hideIfValue=3}}
    

    【讨论】:

    • 在这种方法中 content=model 是什么意思?
    • 从索引模型钩子['red', 'yellow', 'blue']返回的控制器上的模型@
    猜你喜欢
    • 1970-01-01
    • 2012-12-26
    • 1970-01-01
    • 2014-05-05
    • 1970-01-01
    • 1970-01-01
    • 2014-05-26
    • 2021-03-19
    • 2010-10-08
    相关资源
    最近更新 更多