Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/420.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_Underscore.js Templating - Fatal编程技术网

Javascript 使用新的主干模型向我的下划线模板添加更多的循环?

Javascript 使用新的主干模型向我的下划线模板添加更多的循环?,javascript,backbone.js,underscore.js,underscore.js-templating,Javascript,Backbone.js,Underscore.js,Underscore.js Templating,更新: 我已经让我的代码正常工作了,但我有两个问题,还有一个问题我不知道如何解决。我将在下面发布我的当前代码。一个客户端附加到TimesheetData模板的右侧部分。但它将选项标记包装在另一个选项的ClientData模板中 所以我得到: <select> <option> <option value="XX"> XXX </option> </option> </select> 时间表数据代码: var

更新:

我已经让我的代码正常工作了,但我有两个问题,还有一个问题我不知道如何解决。我将在下面发布我的当前代码。一个客户端附加到TimesheetData模板的右侧部分。但它将选项标记包装在另一个选项的ClientData模板中

所以我得到:

 <select>
     <option> <option value="XX"> XXX </option> </option>
 </select>
时间表数据代码:

var ClientModel = Backbone.Model.extend({
    defaults: {
        Client: "",
    }
}); //End of ClientModel

var ClientCollection = Backbone.Collection.extend({
    model: ClientModel,
    url: '/dashboard/json/clients'
}); //End of ClientCollection

var ClientView = Backbone.View.extend({
    tagName: 'option',
    template: _.template($('#ClientData').html()), 
    render: function() {
        this.$el.append(this.template(this.model.toJSON()));
        return this.$el;
    }
}); 
var TimeSheetModel = Backbone.Model.extend({
    defaults: {
        Timesheetrow: "",
    }
}); //End of TimeSheetModel

var TimeSheetCollection = Backbone.Collection.extend({
    model: TimeSheetModel,
    url: '/dashboard/json/row/' + TimesheetID()
}); //End of TimeSheetCollection

var TimeSheetRowView = Backbone.View.extend({
    className: 'TimesheetRowLine', 
    template: _.template($('#TimesheetData').html()), 
    render: function() {
        this.$el.append(this.template(this.model.toJSON()));
        return this.$el;
    }
}); //End of TimeSheetRowView
时间表和客户代码部分:

var TimeSheetCollectionView = Backbone.View.extend({
    el:'#MasterContainer', 

    template: _.template($('#TimesheetForm').html()),

    events: {
        "click .actionSubmit": "handleSubmit"
    }, 

    initialize: function() {
        //Get Client Data & Add To Template
        this.clientcollection = new ClientCollection();
        this.listenTo(this.clientcollection, "add", this.AddClient);
        this.clientcollection.fetch();

        //Get Main Timesheet Data & Add To Template
        this.collection = new TimeSheetCollection();
        this.listenTo(this.collection, "add", this.AddTimesheetRow);
        this.collection.fetch();

        this.$el.append(this.template());
        this.submitButton = this.$(".actionSubmit");
    },

    AddTimesheetRow: function(model) {
        var view = new TimeSheetRowView({model: model});
        view.render().insertBefore(this.submitButton);
    },

    AddClient: function(model) {
        var clients = new ClientView({model: model});
        $("#TimesheetDataList .TimesheetRowLine #clienttemp").append( clients.render() );
    },

    handleSubmit: function(){
        //in real life, you would validate and save some model
        alert("form submit");
        return false;
    }
}); //End of TimeSheetCollectionView

var collectionView = new TimeSheetCollectionView(); 
这是我的下划线模板代码:

 <script type="text/template" id="TimesheetForm">
    <form action="#" method="post" id="TimesheetDataList" style="width: auto; padding-left: 50px;">   
       <input type="submit" class="actionSubmit" value="Send"/>
    </form>
 </script>

 <script type="text/template" id="TimesheetData">

   <%= console.log( Timesheetrow.client_id ) %>

   <input type="hidden" name="data[Timesheetrow][<%= Timesheetrow.id %>][id]" value="<%= Timesheetrow.id  %>">
   <input type="type" name="data[Timesheetrow][<%= Timesheetrow.id %>][jobtitle]" value="<%= Timesheetrow.twistjob  %>"> 

   <select name="data[Timesheetrow][<%= Timesheetrow.id %>][client_id]" id="clienttemp"></select>

 </script>

 <script type="text/template" id="ClientData">
    <option value="<%= Client.id %>"><%= Client.clientname %></option>
 </script>
所以我试着用同样的方法。我知道我必须寻求更多的培训来扩展我的知识

有了这段代码,我就有了一个客户端列表,我需要将其加载到select/option下拉表单元素中。但它似乎只循环了17次,这是我时间表中的行数。我正在控制台“ClientData”模板中记录“Client”,这是显示我的客户端数据,但仅显示记录在时间表行中的客户端数据,而不是模型/集合指向的JSON数据中的所有客户端?我还收到了客户的参考错误?即使它在我的模型中是默认的

我对主干线有点了解,但不太了解

欢迎大家帮忙

谢谢

::编辑::

我想我会发布我的下划线模板

 CODE REMOVED - SEE UPDATE
所以我要做的是在ClientData模板中为所有客户机循环使用“option”标记,然后将其添加到TimesheetData模板上的select元素中。然后,通过将此模板添加到时间表表单模板(它已经这样做了)来完成

这可能需要一种不同的方法,这可能是我的错,因为我忘了在客户列表中的另一个问题上解释


谢谢,

您的ClientView和ClientCollectionView都将模板设置为ClientData,这肯定会导致集合出错。另外,在AddClient上,您正在clientView上调用render,但您从未将其el附加到DOMOk,现在,在其他方面,我有一点了解这一点-再次非常感谢您的帮助:您的best@daniel-j-g,我已经将ClientCollectionView模板更改为TimesheetForm.,这清除了我的引用错误。但是我的console.log在我的ClientView模板中,它仍然只记录了17次控制台日志?虽然所有的温度都是100度。我的列表中的客户端难道你的api不返回包含17项的json吗?所以,每一个模型都被添加到您的收藏中。有时,我应该睁开眼睛我需要将路径更改为“/clients”,而不是“/row”。它现在会记录所有客户端,但模板不会在html中显示它们?我肯定我做错了什么,但是谢谢你的帮助
 CODE REMOVED - SEE UPDATE