backbone.js - How to do multiple models in the same page using backbone and RequireJS -
i developing aplication single page. i'm using backbone.js , requirejs. problem on 1 page use 3 different models not interrelated. loads first.
page.html
<html><heade></heade><body> <div id="content"> <div id="results"></div> <div id="collectortable"> <!-- container gets populated index --> </div> <div id="collectoredition"> <!-- container gets populated edition --> </div> <div style="margin-top: 10px"> <div id="terms" style="width: 50%; float: left; height: auto !important; min-height: 100px;"> <div id="termtable"><!-- term model index --></div> <div id="termedition"><!-- term model edition --></div> </div> <div id="termscampaign" style="width: 50%; float: left; height: auto !important; min-height: 100px;"> <div id="termcampaigntable"><!-- termcampaign model edition --></div> <div id="termcampaignedition"><!-- termcampaign model edition --></div> </div> </div> </div> <script data-main="js/maincollector" src="js/libs/require.js"></script> <script data-main="js/mainterm" src="js/libs/require.js"></script> <script data-main="js/maintermcampaign" src="js/libs/require.js"></script> </body> </html>
maincollector.js
require.config({ baseurl: "js", paths: { html5shiv: "libs/html5shiv", jquery: "http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min", jqueryui: "http://code.jquery.com/ui/1.10.3/jquery-ui", tablesorter: "libs/jquery.tablesorter.min", script: "script", underscore: "libs/underscore.min", backbone: "libs/backbone.min", utils: "utils", //files collector collectormodel: "models/collectormodel", collectorcollection: "collections/collectorcollection", collectorrouter: "routers/collectorrouter", // views edit: "views/collector/collector_edit", index: "views/collector/collector_index", neww: "views/collector/collector_new", row: "views/collector/collector_row", show: "views/collector/collector_show", //templates 'templates': 'templates' }, shim: { jqueryui: { deps: ["jquery"] }, tablesorter: { deps: ["jquery"], exports: "tablesorter" }, script: { deps: ["jquery", "jqueryui", "tablesorter"], exports: "script" }, underscore: { exports: "_" }, backbone: { deps: ["underscore", "jquery"], exports: "backbone" } } }); require(["backbone", "underscore", "collectorcollection", "collectorrouter", "script"], function (backbone, _, collectorcollection, collectorrouter) { var collectors = new collectorcollection(); var router = new collectorrouter({collectors: collectors}); backbone.history.start(); });
mainterm.js
require.config({ baseurl: "js", paths: { html5shiv: "libs/html5shiv", jquery: "http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min", jqueryui: "http://code.jquery.com/ui/1.10.3/jquery-ui", tablesorter: "libs/jquery.tablesorter.min", script: "script", underscore: "libs/underscore.min", backbone: "libs/backbone.min", utils: "utils", //files term termmodel: "models/termmodel", termcollection: "collections/termcollection", termrouter: "routers/termrouter", // views ... //templates 'templates': 'templates' }, shim: { ... } }); require(["backbone", "underscore", "termcollection", "termrouter", "script"], function (backbone, _, termcollection, termrouter) { var terms = new termcollection(); var router = new termrouter({terms: terms}); backbone.history.start(); });
maintermcampaign.js
require.config({ baseurl: "js", paths: { html5shiv: "libs/html5shiv", jquery: "http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min", jqueryui: "http://code.jquery.com/ui/1.10.3/jquery-ui", tablesorter: "libs/jquery.tablesorter.min", script: "script", underscore: "libs/underscore.min", backbone: "libs/backbone.min", utils: "utils", //files term campaign termcampaignmodel: "models/termcampaignmodel", termcampaigncollection: "collections/termcampaigncollection", termcampaignrouter: "routers/termcampaignrouter", // views ... //templates 'templates': 'templates' }, shim: { ... } }); require(["backbone", "underscore", "termcampaigncollection", "termcampaignrouter", "script"], function (backbone, _, termcampaigncollection, termcampaignrouter) { var termscampaign = new termcampaigncollection(); var router = new termcampaignrouter({termscampaign: termscampaign}); backbone.history.start(); });
you should have 1 main.js
file in view,
<script data-main="js/maincollector" src="js/libs/require.js"></script> <script data-main="js/mainterm" src="js/libs/require.js"></script> <script data-main="js/maintermcampaign" src="js/libs/require.js"></script>
is wrong, use:
<script data-main="js/main" src="js/libs/require.js"></script>
, , put logic main.js
file. wrote maincollector, mainterm.js , maintermcampaign.js similar. mean have 3 routers in app, seems bad thing, think 1 should enough. think should think again how structure code.
you put script
tag body
, unusual, read require.js docs , try use best practices.
Comments
Post a Comment