Javascript 对主干集合使用下划线模板
我正在使用主干构建一个大型HTML表单。每个表单字段都是称为Javascript 对主干集合使用下划线模板,javascript,backbone.js,underscore.js,marionette,Javascript,Backbone.js,Underscore.js,Marionette,我正在使用主干构建一个大型HTML表单。每个表单字段都是称为字段的主干模型的实例。我有一个名为Fields的主干集合,它获取一个JSON文件并实例化所有表单字段 这是我的问题:当我呈现表单字段集合时,我并不只是想要一个统一的表单字段列表。例如,大多数联机主干教程向您展示了如何通过将每个模型的视图包装在li中,并将集合元素包装为ul来呈现集合 相反,我有一个HTML模板,它被分成如下几个部分: 我希望“月”和“年”字段位于一个div中,而其他字段位于各自的div中。这些字段将使用CSS进行不同的
字段的主干模型的实例。我有一个名为Fields
的主干集合,它获取一个JSON文件并实例化所有表单字段
这是我的问题:当我呈现表单字段集合时,我并不只是想要一个统一的表单字段列表。例如,大多数联机主干教程向您展示了如何通过将每个模型的视图包装在li
中,并将集合元素包装为ul
来呈现集合
相反,我有一个HTML模板,它被分成如下几个部分:
我希望“月”和“年”字段位于一个div中,而其他字段位于各自的div中。这些字段将使用CSS进行不同的样式设置是否可以将大下划线模板传递给集合,并将其模型实例打印到适当的位置?
这是一个类似的用例吗
任何想法都很感激 我不确定我是否完全理解您的问题,但我认为您可能需要在您的领域模型中提供更多信息。例如,可以在字段模型中包含一个组
属性,然后在其自己的div中呈现来自同一组的所有字段
这就是你想要做的吗?我会选择另一种方法:
将一个模板分解为至少不同的模板(时间、位置、车辆信息),因为这是三个不同的主题,我将在不同的视图中处理。
之后,将时间视图分解为月份视图和年度视图,依此类推
因此,每个子视图都有自己的模型,模型中的值用于呈现其HTML。我认为在这里使用集合没有任何意义——因为您有异构的“字段”/模型
之后,我将使用类似于表单支持模型的东西,它表示表单的当前状态。因此,将formView实现为超级视图,将其他视图实现为嵌套视图将是一个不错的选择
var FormView = new Backbone.View.extend({
initialize: function(){
//initialize all subviews
},
events:{
"change":"formChanged"
}
formChanged:function(element){
//update formBackingObject aka this.model
}
});
然后,所有视图都有一个清晰的分隔,一个模型表示当前选择的状态。我看到了解决问题的两种主要方法:
更简单的方法是:将表单设置为一个大的itemView,并向其传递一个带有字段
属性(即您的集合)的表单模型。然后,在视图中,您需要迭代并生成html
更简洁的方法:为表单使用布局,并将其他布局渲染到“时间”、“位置”等区域(如Lilith所建议的)。例如,“时间”布局将包含“月”和“年”视图。反过来,“月”视图将是一个集合视图,它将集合中的每个选项呈现为选择标记的选项
尽管第一种解决方案往往更易于实现(因为它更接近于传统的无状态web开发),但第二种解决方案将更易于管理。您可以在每个视图(例如,选择标记)上注册事件处理程序,而无需命名冲突,而且由于表单的复杂性将被分解为各个部分,因此今后的管理将更容易。我认为您可以使用木偶收集视图。使用集合视图,可以为集合中的每个项目指定不同的视图。见文件;
如果希望控制项目的呈现位置,可以覆盖appendHtml以指示如何将itemView附加到collectionView,这是可能的。然后我会为每个组创建一个子视图吗?
?我认为您使用的主干不正确。表单应该在一个模型上进行渲染,实际上应该是一个模板,因为您并没有真正遍历任何对象