2014-04-25 15 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

相关问题