1

我不确定这是否可能,因为我对网络非常陌生。所以基本上我想要做的是,遍历一个数组,并为数组中的每个元素,用适当的信息填充主干视图。我认为我可以做的是在我的 .cshtml 中声明这个模板:

<div id="template-sample-validation-error">
    <form id="sample-validation-form" class="form">
                <div id="sampleName" class="control-label">Sample Name:</div>
        </form>
</div>

(实际模板中实际上还有更多字段,但我没有将它们全部包含在内)。

因此,使用该模板,我认为我可以将视图绑定到该模板并为集合中的每个项目附加一个新模板。问题是,由于 id 不是唯一的,在我的主干视图的初始化方法中,我无法获取唯一项:

// some of the backbone view
SampleValidationView = (function() {
    return Backbone.View.extend({
        initialize: function (sample) {
            var sampleMessage = sample.get('sampleName');

// iterating and creating a SampleValidationView to render
_.each(samples, function (aView) {                
            var errorView = new SampleValidationView(aView);
            this.$('#template-sample-validation-error').append(errorView.render().$el);
        });

然后我找到了这个帖子,基本上就是给div加了一个数字,让div唯一。
创建具有唯一 ID 的动态 div - jQuery

我不确定如何用我创建的模板做这样的事情。我想另一种选择是做一些与帖子中所做的类似的事情,但我认为为每个视图都有一个模板,并且让每个视图根据数组中的项目数量相互附加会更干净。但我被困住了。任何想法将不胜感激。谢谢!

4

1 回答 1

1

如果您在模板中使用下划线,则可以在 id 末尾添加 <%= %> 以附加模型的 id 或传入的对象。例如:

<div id-"unique-id-<%= id %>">
    ...content
</div>

当您调用 _.template({id : 1}) 时,它只会将模型的 id 或传递给模板的对象放入模板中。这会给:

<div id-"unique-id-1">
    ...content
</div>

您应该做什么而不是使用 jquery 显式查找#template-sample-validation-error,您应该声明视图的 el var。这使您可以简单地调用 this.$el。所以也许是这样的:

// some of the backbone view
SampleValidationView = (function() {
    return Backbone.View.extend({

        el : '#template-sample-validation-error',
        template : _.template($('#template-sample-validation-error').html()),

        initialize: function (sample) {
            var sampleMessage = sample.get('sampleName');
        },

        render : function(){
            this.$el.html(this.template({id : 1})); // Some unique id

            // iterating and creating a SampleValidationView to render
            _.each(samples, function (aView) {                
                var errorView = new SampleValidationView(aView);
                this.$el.append(errorView.render().$el);
        }
    });
于 2013-04-02T03:58:02.543 回答