2

ember.js、別名を介してクリック時に要素クラスを変更するにはどうすればよいですか:

<div class="row" {{bindAttr class="isEnabled:enabled:disabled"}}>

意見:

SearchDropdown.SearchResultV = Ember.View.extend(Ember.Metamorph, {
    isEnabled: false,

    click: function(){
        window.alert(true);
        this.isEnabled = true;
    }
});

ウィンドウアラートが発生するとクリックイベントが機能しますが、バインディングを取得できません。

4

3 に答える 3

5

クラスは正しくバインドされていますが、isEnabledプロパティは.setなどの呼び出しでのみ変更し、this.set('isEnabled', true)でのみアクセスする必要がありますthis.get('isEnabled')。これは、ファーストクラスのバインディングと計算されたプロパティをサポートする Ember 規則です。

于 2012-09-05T15:52:02.913 に答える
2

ビューでは、className にバインドします。アプリに次のビューがあります。

EurekaJ.TabItemView = Ember.View.extend(Ember.TargetActionSupport, {
    content: null,
    tagName: 'li',

    classNameBindings: "isSelected",

    isSelected: function() {
        return this.get('controller').get('selectedTab').get('tabId') == this.get('tab').get('tabId');
    }.property('controller.selectedTab'),

    click: function() {
        this.get('controller').set('selectedTab', this.get('tab'));
        if (this.get('tab').get('tabState')) {
            EurekaJ.router.transitionTo(this.get('tab').get('tabState'));
        }

    },

    template: Ember.Handlebars.compile('<div class="featureTabTop"></div>{{tab.tabName}}')
});

ここで、「isSelected」プロパティが返すものに className をバインドしました。これは、ビューのコントローラーの選択されたタブ ID がこのビューのタブ ID と同じ場合にのみ当てはまります。

ビューが選択されると、コードは「is-selected」という CSS クラス名を追加します。

コードをコンテキストで確認したい場合、コードは GitHub にあります: https://github.com/joachimhs/EurekaJ/blob/netty-ember/EurekaJ.View/src/main/webapp/js/app/views。 js#L100

于 2012-09-04T19:18:49.543 に答える
1

良い答えですが、別のルートをたどりました:

SearchDropdown.SearchResultV = Ember.View.extend(Ember.Metamorph, {
    classNameBindings: ['isSelected'],
    click: function(){

        var content = this.get('content');
        SearchDropdown.SelectedSearchController.set('content', content);
        var loadcontent = this.get('content');
        loadcontent.set("searchRadius", $("select[name=radius]").val());

        SearchDropdown.LoadMap.load(content);

    },
    isSelected: function () {
        var selectedItem = SearchDropdown.SelectedSearchController.get('content'),
          content = this.get('content');
        if (content === selectedItem) {
          return true;
        }
      }.property('SearchDropdown.SelectedSearchController.content')
});

コントローラ:

SearchDropdown.SelectedSearchController = Ember.Object.create({
  content: null,

});

基本的には選択したビューのデータをコントローラーに格納し、

于 2012-09-06T08:08:45.317 に答える