1

我一直在尝试比较车把 if 语句中的一些值{{#if value == 'otherValue'}},显然没有成功,因为车把不喜欢这样,并且需要一个字符串、布尔值或函数名。好吧,那没关系,但后来我尝试在函数中传递参数,就像你可以用{{action}}助手做的那样,而且那也没有锻炼,在控制台中得到了这个

Error: assertion failed: You must pass exactly one argument to the if helper

所以然后我决定在视图中执行此操作,即使 ember js 指出访问范围内的模板值是不寻常的,它们只提供了没有示例的糟糕段落。 http://emberjs.com/guides/understanding-ember/the-view-layer/#toc_accessing-template-variables-from-views

所以当我尝试这样做时,我遇到了访问这些变量的问题,我尝试了这种方式this.get('controller.templateVariables')并通过查看的完整路径,但值要么未定义,要么.get()不作为方法存在。

所以此时我决定将变量保存在 DOM 数据属性中,但事实证明,{{#view App.TabsView data-title="{{tab}}"}}{{tab}}我尝试使用this.get('data-title').

留给我的唯一方法是在视图中插入其他元素并在那里存储变量,然后使用 jQuery 类选择器访问它。但是在执行函数时,DOM 中尚不存在元素isVisible,因此当时我无法访问值。这就解释了为什么this.get('element')要回归null

ember js 上的类似示例大多以类似的结尾 if (someLogic) {},但是当我没有可用的变量时如何执行任何逻辑。

问题

为了简化我的问题 - 有没有办法在 ember js 中做这样的事情?简单如

// have objects stored in controller
var obj = [{title:'Tab1'}, {title:'Tab2'}, {title:'Tab3'}];

// loop via them in the DOM
obj.forEach(function(tab) {
    // do this kind of comparison
    if( tab.title == currentTab() ) {
        // do something here
    }
});

如果那不可能,那么实现类似功能的另一种方法是什么?

4

2 回答 2

1

您可以编写一个处理程序栏助手来执行此操作

{{activeTab tab}}

Handlebars.registerHelper('activeTab', function(tab) {

})

查看关于同一问题的问题

或者查看现有的助手来编写自己的

于 2013-01-28T20:23:11.730 回答
0

我认为证明这一点的最佳方式是使用我为您整理的大量评论 JSFiddle:http: //jsfiddle.net/PbLnm/

如果您不确定任何事情,请在下面提出任何问题。

确定何时添加active类的主要部分在计算属性中:

// Determine if the object we have for this view is the same as the activeTab's object. If it is the same, then this view is the current active tab.
active: function() {
    return Boolean(this.get('parentView.activeTab') == this.get('tab'));
}.property('parentView.activeTab')
于 2013-01-28T21:05:22.777 回答