2014-04-25 33 views
0

我有一個列有木偶應用程序的應用程序。這是一個CompositeView。當用戶單擊列表中的項目(CompositeView)時,我將一些css樣式應用於ItemView以使其顯示爲選中狀態。我在ItemView的click事件中這樣做。很簡單。Marionette js - 以編程方式查找並單擊CompositeView中的ItemView

但我也希望將該列表選擇轉換爲查看同一應用程序的其他瀏覽器。因此,用戶在瀏覽器1中選擇項目#3,並且該選擇反映在那裏以及瀏覽器2中。

問題是存在的瀏覽器沒有點擊2.

我使用SignalR連接的瀏覽器。連接工作正常。當在瀏覽器1中選擇項目#3時,我將數字3傳遞給另一個瀏覽器。

當我在那邊3時,我不知道該如何處理它。

由於沒有瀏覽器2中的點擊,我想我必須找到正確的ItemView並通過編程方式通過JQuery .click()單擊它。我無法在木偶js CompositeView文檔中看到任何東西,這些文檔讓我獲得了我期待的ItemView。我錯過了明顯的東西嗎?這是一個壞方法嗎?

UPDATE:

我結束了與Selvaraj答案去,因爲我有必要包括兩種情況 - 點擊和非點擊(遠程)。點擊案例的代碼在該答案中被重用。但是我也可以爲威爾伯特的答案提供一個案例。

我在我的CompositeView中找到了一個正確的選擇器並點擊它的函數。正確的選擇器是我的ItemView的el的父級,因爲設置動態ID鎖定的唯一位置是在ItemView模板中,當然,這個模板綁定了ItemView包裝元素的子元素。

selectItem: function (itemNum) { 
     var selector = this.$el.find('#model_' + itemNum).parent(); 
     selector.click(); 
    }, 

感謝您的幫助。

回答

0

請在您的合成視圖中嘗試以下代碼。

this.$el.find('your-clicked-list-view-selector').trigger('click'); 
+0

對不起。一點困惑。我沒有視圖選擇器。我所有的是一個索引 - 「3」。我如何將其轉換爲所需的選擇器?或者你是否說有一種方法可以爲CompositeView兒童提供獨特的選擇器? – Robert

+0

啊..我明白了。我可以添加模板。現在試試這個... – Robert

0

在這種情況下,我不會使用.click()事件。儘管我對SignalR不熟悉(快速瀏覽告訴我它與socket.io類似),但有一種方法可能如下:

當您收到此類消息時引發應用事件(例如使用Marionette.wreqr) 。讓所有itemView都聽這個特定的事件。當他們的ID匹配時,請在您的itemView中使用this.$el.addClass('your-class-name')

+0

我想我在這裏錯過了一些東西。我的ItemViews沒有ID。不知道他們可以。有沒有一種方法可以通過添加集合來動態生成ItemViews的唯一ID? – Robert

相關問題