Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 对主干集合使用下划线模板_Javascript_Backbone.js_Underscore.js_Marionette - Fatal编程技术网

Javascript 对主干集合使用下划线模板

Javascript 对主干集合使用下划线模板,javascript,backbone.js,underscore.js,marionette,Javascript,Backbone.js,Underscore.js,Marionette,我正在使用主干构建一个大型HTML表单。每个表单字段都是称为字段的主干模型的实例。我有一个名为Fields的主干集合,它获取一个JSON文件并实例化所有表单字段 这是我的问题:当我呈现表单字段集合时,我并不只是想要一个统一的表单字段列表。例如,大多数联机主干教程向您展示了如何通过将每个模型的视图包装在li中,并将集合元素包装为ul来呈现集合 相反,我有一个HTML模板,它被分成如下几个部分: 我希望“月”和“年”字段位于一个div中,而其他字段位于各自的div中。这些字段将使用CSS进行不同的

我正在使用主干构建一个大型HTML表单。每个表单字段都是称为
字段的主干模型的实例。我有一个名为
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,这是可能的。然后我会为每个
    组创建一个子视图吗?
    ?我认为您使用的主干不正确。表单应该在一个模型上进行渲染,实际上应该是一个模板,因为您并没有真正遍历任何对象