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')で View へのフル パスを使用してみましたが、値が未定義であるか.get()、メソッドとして存在しませんでした。

そのため、現時点では変数を DOM データ プロパティに保存することにしましたが{{#view App.TabsView data-title="{{tab}}"}}{{tab}}View から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 に答える