Backbone.js 主干线。木偶组合视图选项列表

Backbone.js 主干线。木偶组合视图选项列表,backbone.js,marionette,Backbone.js,Marionette,我想创建一个CompositeView,其中包含集合中的下拉列表: 我的看法: var ItemView = Backbone.Marionette.ItemView.extend({ template: '#item-tpl' }); var CompositeView = Backbone.Marionette.CompositeView.extend({ template: '#comp-tpl', itemView: ItemView, itemView

我想创建一个CompositeView,其中包含集合中的下拉列表:

我的看法:

var ItemView = Backbone.Marionette.ItemView.extend({
    template: '#item-tpl'
});

var CompositeView = Backbone.Marionette.CompositeView.extend({
    template: '#comp-tpl',
    itemView: ItemView,
    itemViewContainer: '#mySelect'         
});
我的模板:

<script id = "item-tpl" type="text/template">
    <option value="<%= id %>"><%= name %></option>
</script>

<script id = "comp-tpl" type="text/template">
   ...
          <form>
          <div class="control-group">
                <select id='mySelect'></select>
          </div>
         </form>

   ...
</script>

...
...
呈现的HTML显示默认的div,这打破了选项列表

<select id="mySelect">
    <div>
        <option value="5">name 1</option>
    </div>
    <div>
        <option value="6">name 2</option>
    </div>
</select>

名字1
名称2
我怎样才能做到这一点:

<select id="mySelect">
    <option value="5">name 1</option>
    <option value="6">name 2</option>
</select>

名字1
名称2

我会使用这种技术:

从简化模板开始:

<script id = "item-tpl" type="text/template">
  <%= name %>
</script>
您可以指定标记名的
属性,这样它就不会使用默认的
div
标记进行渲染,而是使用所需的
选项
标记。然后,当呈现该选项时,需要设置
属性,这是通过
onRender
函数实现的

最后,这里是您的新组合视图:

var aCompositeView = Backbone.Marionette.CompositeView.extend({
    template: '#comp-tpl',
    itemView: aItemView,  
    itemViewContainer: "select"   
});
我们指定
itemViewContainer
来告诉木偶将项目视图放在哪里。这样,我们就不需要重新定义
appendHtml

这个解决方案更干净,因为我们使用木偶功能,而不是自己做任何事情。。。当然,其他解决方案也会奏效


如果您想了解有关使用木偶生成正确的HTML结构的更多信息,您可能会对我的这篇博文感兴趣:

我会使用这种技术:

从简化模板开始:

<script id = "item-tpl" type="text/template">
  <%= name %>
</script>
您可以指定标记名的
属性,这样它就不会使用默认的
div
标记进行渲染,而是使用所需的
选项
标记。然后,当呈现该选项时,需要设置
属性,这是通过
onRender
函数实现的

最后,这里是您的新组合视图:

var aCompositeView = Backbone.Marionette.CompositeView.extend({
    template: '#comp-tpl',
    itemView: aItemView,  
    itemViewContainer: "select"   
});
我们指定
itemViewContainer
来告诉木偶将项目视图放在哪里。这样,我们就不需要重新定义
appendHtml

这个解决方案更干净,因为我们使用木偶功能,而不是自己做任何事情。。。当然,其他解决方案也会奏效


如果您想了解有关使用木偶生成正确HTML结构的更多信息,您可能会对我的这篇博文感兴趣:

非常简单,实际上您只需使用jquery包装“el”(元素),因此视图应该如下所示:

var aItemView = Backbone.Marionette.ItemView.extend({
..
..

  el: $('#mySelect'),

..
这样就避免了默认的div,并且只能使用所需的元素。 那么你会得到这个吗

<select id="mySelect">
  <option value="5">name 1</option>
  <option value="6">name 2</option>
</select>

名字1
名称2

非常简单,实际上您只需使用jquery包装“el”(元素),因此视图应如下所示:

var aItemView = Backbone.Marionette.ItemView.extend({
..
..

  el: $('#mySelect'),

..
这样就避免了默认的div,并且只能使用所需的元素。 那么你会得到这个吗

<select id="mySelect">
  <option value="5">name 1</option>
  <option value="6">name 2</option>
</select>

名字1
名称2