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_Backbone Routing - Fatal编程技术网

Javascript 在同一页面中容纳多个主干视图、模型和集合

Javascript 在同一页面中容纳多个主干视图、模型和集合,javascript,backbone.js,backbone-routing,Javascript,Backbone.js,Backbone Routing,我正在努力在同一页中显示两个模型/集合 <body> <div id="mainContainer"> <div id="contentContainer"></div> </div> <div id="mainContainer2"> <div id="contentContainer2"></div> </div> <script id="list_c

我正在努力在同一页中显示两个模型/集合

    <body>

<div id="mainContainer">
    <div id="contentContainer"></div>
</div>
<div id="mainContainer2">
    <div id="contentContainer2"></div>
</div>

<script id="list_container_tpl" type="text/template">
<div class="grid_5 listContainer">
    <div class="box">
        <h2 class="box_head grad_colour">Your tasks</h2>
        <div class="sorting">Show: <select id="taskSorting"><option value="0">All Current</option><option value="1">Completed</option></select>
            <input class="search round_all" id="searchTask" type="text" value="">
        </div>
        <div class="block">
            <ul id="taskList" class="list"></ul>
        </div>
    </div>
</div>
</script>

<script id="list2_container_tpl" type="text/template">
<div class="grid_5 mylistContainer">
    <div class="box">
        <h2 class="box_head grad_colour">Your facets</h2>
        <div class="sorting">
            %{--Show: <select id="taskSorting"><option value="0">All Current</option><option value="1">Completed</option></select>--}%
            <input class="search round_all" id="searchFacet" type="text" value="">
        </div>
        <div class="block">
            <ul id="facetList" class="list"></ul>
        </div>
    </div>
</div>
</script>


<script id="task_item_tpl" type="text/template">
<li class="task">
    <h4 class="name searchItem">{{ name }}</h4>
</li>
</script>
<script id="facet_item_tpl" type="text/template">
<li class="facet">
    <h5 class="label searchItem">{{ label }}</h5>
</li>
</script>

<script>
    var myapp = {
        model: {},
        view: {},
        collection: {},
        router: {}
    };
    var facetsSearch = {
        model: {},
        view: {},
        collection: {},
        router: {}
    };
</script>

<script src="underscore-min.js"></script>
<script src="handlebars.min.js"></script>
<script src="backbone-min.js"></script>
<script>
    /* avoid */
    _.templateSettings = {
        interpolate: /\{\{(.+?)\}\}/g
    };
</script>
<script>
    // model.tasks.js
    myapp.model.Tasks = Backbone.Model.extend({
        default:{
            completed: 0,
            name: ""
        },
        //url:"/js/libs/fixtures/task.json"
    });
    var tasks1 = new myapp.model.Tasks({
            completed: 0,
            name: "Clear dishes"
        }
    );
    var tasks2 = new myapp.model.Tasks({
            completed: 1,
            name: "Get out the trash"
        }
    );
    var tasks3 = new myapp.model.Tasks({
            completed: 0,
            name: "Do the laundry"
        }
    );
    var tasks4 = new myapp.model.Tasks({
            completed: 1,
            name: "Vacuuming the carpet"
        }
    );

    // collection.tasks.js
    myapp.collection.Tasks = Backbone.Collection.extend({
        currentStatus : function(status){
            return _(this.filter(function(data) {
                return data.get("completed") == status;
            }));
        },
        search : function(letters){
            if (letters == "") return this;

            var pattern = new RegExp(letters,"gi");
            return _(this.filter(function(data) {
                return pattern.test(data.get("name"));
            }));
        }
    });
    myapp.collection.tasks = new myapp.collection.Tasks([tasks1, tasks2, tasks3, tasks4]);

    // route.tasks.js
    myapp.router.Tasks = Backbone.Router.extend({
        routes: {
            "": "list",
        },
        list: function(){
            this.listContainerView = new myapp.view.TasksContainer({
                collection: myapp.collection.tasks
            });
            $("#contentContainer").append(this.listContainerView.render().el);
            this.listContainerView.sorts()
        }
    });
    myapp.router.tasks = new myapp.router.Tasks;

    <!-- render views -->
    myapp.view.TasksContainer = Backbone.View.extend({
        events: {
            "keyup #searchTask"     : "search",
            "change #taskSorting"   : "sorts"
        },
        render: function(data) {
            $(this.el).html(this.template);
            return this;
        },
        renderList : function(tasks){
            $("#taskList").html("");

            tasks.each(function(task){
                var view = new myapp.view.TasksItem({
                    model: task,
                    collection: this.collection
                });
                $("#taskList").append(view.render().el);
            });
            return this;
        },
        initialize : function(){
            this.template = _.template($("#list_container_tpl").html());
            this.collection.bind("reset", this.render, this);
        },
        search: function(e){
            var letters = $("#searchTask").val();
            this.renderList(this.collection.search(letters));
        },
        sorts: function(e){
            var status = $("#taskSorting").find("option:selected").val();
            if (status == "") status = 0;
            this.renderList(this.collection.currentStatus(status));
        }
    });
    myapp.view.TasksItem = Backbone.View.extend({
        events: {},
        render: function(data) {
            $(this.el).html(this.template(this.model.toJSON()));
            console.log(this.model.toJSON(), "became", this.template(this.model.toJSON()));
            return this;
        },
        initialize : function(){
            this.template = _.template($("#task_item_tpl").html());
        }
    });
</script>

<script>
    // model.facets.js
    facetsSearch.model.Facets = Backbone.Model.extend({
        default: {
            id: 0,
            label: "",
            facetValues: []
        }
    });

    var facet1 = new facetsSearch.model.Facets({
        id: 1,
        label: "Organism",
        facetValues: ["Orga1", "Orga2"]
    });
    var facet2 = new facetsSearch.model.Facets({
        id: 2,
        label: "Omics",
        facetValues: ["Omics1", "Omics2"]
    });
    var facet3 = new facetsSearch.model.Facets({
        id: 3,
        label: "Publication Date",
        facetValues: ["2016-11-01", "2016-11-02"]
    });

    // collection.facets.js
    facetsSearch.collection.Facets = Backbone.Collection.extend({
        search : function(letters){
            if (letters == "") return this;

            /**
             * the g modifier is used to perform a global match (find all matches rather than stopping after the first match).
             * Tip: To perform a global, case-insensitive search, use this modifier together with the "i" modifier.
             */
            var pattern = new RegExp(letters, "gi");
            return _(this.filter(function(data) {
                return pattern.test(data.get("label"));
            }));
        }
    });
    facetsSearch.collection.facets = new facetsSearch.collection.Facets([facet1, facet2, facet3]);

    // route.facets.js
    facetsSearch.router.Facets = Backbone.Router.extend({
        routes: {
            "": "list",
        },
        list: function(){
            this.mylistContainerView = new facetsSearch.view.FacetsContainer({
                collection: facetsSearch.collection.facets
            });
            console.log("Facet collection: ", facetsSearch.collection.facets);
            $("#contentContainer2").append(this.mylistContainerView.render().el);
            this.mylistContainerView.sorts()
        }
    });

    facetsSearch.router.Facets = new facetsSearch.router.Facets;

    facetsSearch.view.FacetsContainer = Backbone.View.extend({
        events: {
            "keyup #searchFacet" : "search",
            "change #facetSorting": "sorts"
        },
        render: function(data) {
            $(this.el).html(this.template);
            return this;
        },
        renderList : function(facets){
            $("#facetList").html("");

            facets.each(function(facet){
                var view2 = new facetsSearch.view.FacetsItem({
                    model: facet,
                    collection: this.collection
                });
                $("#facetList").append(view2.render().el);
            });
            return this;
        },
        initialize : function(){
            this.template = _.template($("#list2_container_tpl").html());
            this.collection.bind("reset", this.render, this);
        },
        search: function(e){
            var letters = $("#searchFacet").val();
            this.renderList(this.collection.search(letters));
        },
        sorts: function(e){
            /*var status = $("#taskSorting").find("option:selected").val();
             if (status == "") status = 0;
             this.renderList(this.collection.currentStatus(status));*/
        }
    });
    facetsSearch.view.FacetsItem = Backbone.View.extend({
        events: {},
        render: function(data) {
            $(this.el).html(this.template(this.model.toJSON()));
            console.log(this.model.toJSON(), "became", this.template(this.model.toJSON()));
            return this;
        },
        initialize : function(){
            this.template = _.template($("#facet_item_tpl").html());
        }
    });

</script>
<script>
    Backbone.history.start();
</script>
</body>

你的任务
显示:所有当前已完成
    你的方面 %{--显示:所有当前已完成--}%
    • {{name}}
    • {{label}}
    • var myapp={ 型号:{}, 视图:{}, 集合:{}, 路由器:{} }; 变量facetsSearch={ 型号:{}, 视图:{}, 集合:{}, 路由器:{} }; /*避开*/ _.templateSettings={ 内插:/\{(.+?)\}\}/g }; //model.tasks.js myapp.model.Tasks=Backbone.model.extend({ 默认值:{ 完成日期:0, 姓名:“ }, //url:“/js/libs/fixtures/task.json” }); var tasks1=新的myapp.model.Tasks({ 完成日期:0, 名称:“清菜” } ); var tasks2=新的myapp.model.Tasks({ 完成日期:1, 姓名:“滚出垃圾桶” } ); var tasks3=新的myapp.model.Tasks({ 完成日期:0, 姓名:“洗衣服” } ); var tasks4=新的myapp.model.Tasks({ 完成日期:1, 名称:“吸尘地毯” } ); //collection.tasks.js myapp.collection.Tasks=Backbone.collection.extend({ 当前状态:功能(状态){ return(此.filter)函数(数据){ 返回数据。获取(“完成”)==状态; })); }, 搜索:函数(字母){ 如果(字母==“”)返回此项; var模式=新的RegExp(字母“gi”); return(此.filter)函数(数据){ 返回模式.test(data.get(“name”)); })); } }); myapp.collection.tasks=新的myapp.collection.tasks([tasks1,tasks2,tasks3,tasks4]); //route.tasks.js myapp.router.Tasks=Backbone.router.extend({ 路线:{ “:”列表“, }, 列表:函数(){ this.listContainerView=新建myapp.view.TaskContainer({ 集合:myapp.collection.tasks }); $(“#contentContainer”).append(this.listContainerView.render().el); this.listContainerView.sorts() } }); myapp.router.tasks=新建myapp.router.tasks; myapp.view.TasksContainer=Backbone.view.extend({ 活动:{ “键控#搜索任务”:“搜索”, “更改任务排序”:“排序” }, 渲染:函数(数据){ $(this.el).html(this.template); 归还这个; }, renderList:函数(任务){ $(“#任务列表”).html(“”); 任务。每个(功能(任务){ var view=new myapp.view.TasksItem({ 模型:任务, 收藏:这个。收藏 }); $(“#任务列表”).append(view.render().el); }); 归还这个; }, 初始化:函数(){ this.template=.template($(“#list_container_tpl”).html()); this.collection.bind(“reset”,this.render,this); }, 搜索:功能(e){ var字母=$(“#搜索任务”).val(); this.renderList(this.collection.search(字母)); }, 排序:函数(e){ var status=$(“#任务排序”).find(“选项:选定”).val(); 如果(状态=“”)状态=0; this.renderList(this.collection.currentStatus(status)); } }); myapp.view.TasksItem=Backbone.view.extend({ 事件:{}, 渲染:函数(数据){ $(this.el).html(this.template(this.model.toJSON()); log(this.model.toJSON(),“been”,this.template(this.model.toJSON()); 归还这个; }, 初始化:函数(){ this.template=.template($(“#任务_项目_tpl”).html()); } }); //model.facets.js facetsearch.model.Facets=Backbone.model.extend({ 默认值:{ id:0, 标签:“, FacetValue:[] } }); var facet1=新facetsearch.model.Facets({ id:1, 标签:“生物体”, facetValues:[“Orga1”、“Orga2”] }); var facet2=新facetsearch.model.Facets({ id:2, 标签:“经济学”, FacetValue:[“Omics1”、“Omics2”] }); var facet3=新facetsearch.model.Facets({ id:3, 标签:“出版日期”, FacetValue:[“2016-11-01”、“2016-11-02”] }); //collection.facets.js facetsSearch.collection.Facets=Backbone.collection.extend({ 搜索:函数(字母){ 如果(字母==“”)返回此项; /** *g修饰符用于执行全局匹配(查找所有匹配,而不是在第一次匹配后停止)。 *提示:要执行不区分大小写的全局搜索,请将此修饰符与“i”修饰符一起使用。 */ var模式=新的RegExp(字母“gi”); return(此.filter)函数(数据){ 返回模式.test(data.get(“label”); })); } }); facetsSearch.collection.facets=新的facetsSearch.collection.facets([facet1,facet2,facet3]); //route.facets.js facetsSearch.router.Facets=主干网.router.extend({ 路线:{ “:”列表“, }, 列表:函数(){ this.mylistContainerView=新facetsSearch.view.FacetsContainer({ 集合:facetsSearch.collection.facets });
      var Layout = Backbone.View.extend({
          template: _.template($('#layout-template').html()),
          // keep the selector strings in a simple object
          selectors: {
              tasks: '.task-container',
              facets: '.facet-container',
          },
          initialize: function() {
      
              this.view = {
                  tasks: new TaskList(),
                  facets: new FacetList()
              };
          },
          render: function() {
              this.$el.html(this.template());
              var views = this.views,
                  selectors = this.selectors;
              this.$(selectors.tasks).append(views.tasks.render().el);
              this.$(selectors.facets).append(views.facets.render().el);
              return this;
          }
      });
      
      var Router = Backbone.Router.extend({
          routes: {
              "": "list",
          },
          list: function() {
              this.listContainerView = new Layout();
              $("body").html(this.listContainerView.render().el);
          }
      });
      
      var TaskRouter = Backbone.Router.extend({
          routes: {
              'tasks': 'taskList',
              'tasks/:id': 'taskDetails'
          }
          // ...snip...
      });
      
      var FacetsRouter = Backbone.Router.extend({
          routes: {
              'facets': 'facetList',
              'facets/:id': 'facetDetails'
          }
          // ...snip...
      });
      
      myapp.view.TasksContainer = Backbone.View.extend({
          // gets compiled once
          template: _.template($("#list_container_tpl").html()),
      
          initialize: function() {
              // not here, as it gets compiled for each view
              // this.template = _.template($("#list_container_tpl").html())
          },
      });
      
      render: function(data) {
          this.$el.html(this.template);
          // I like to namespace them inside an object.
          this.elements = {
              $list: this.$('.task-list'),
              $search: this.$('.task-sorting')
          };
      
          // then werever you want to use them
          this.elements.$list.toggleClass('active');
      
          return this;
      },
      
      this.collection.bind("reset", this.render, this);
      // becomes
      this.listenTo(this.collection, "reset", this.render);
      
      myapp.collection.Tasks = Backbone.Collection.extend({
          model: myapp.model.Tasks
          // ...snip...
      });
      
      myapp.collection.tasks = new myapp.collection.Tasks([{
          completed: 0,
          name: "Clear dishes"
      }, {
          completed: 1,
          name: "Get out the trash"
      }, {
          completed: 0,
          name: "Do the laundry"
      }, {
          completed: 1,
          name: "Vacuuming the carpet"
      }]);