我是Marionette和Requirejs的新人。我开始将旧的代码结构(主干)更改为Marionette。使用Requirejs我将我的初始html页面中所需的旧脚本列表更改为Requirejs sintax。在那之前很好,脚本会加载到我要求的每个模块中。例如:
define(['App', 'dhController', 'menu', 'gridmenu', 'menubar', 'sidebar', 'asPieProgress'], function(app) {
app.module('dh.Views', function (Views, app, Backbone, Marionette, $, _) {
....other stuff...
//----- REQUESTS -----
// Dashboard Request Item View
// -------------------
//
// Display an individual request panel
Views.ERequest = Marionette.ItemView.extend({
tagName: 'div',
template: '#template-request', **<-- In this template is the pluging needed**
ui: {
pieChart: '.pie-progress-level'
},
onRender: function () {
this.ui.pieChart.asPieProgress("go", 50);
}
});
// Dashboard Request Collection View
// -------------------
//
// Display a list of requests
Views.ERequests = Marionette.CollectionView.extend({
tagName: 'ul',
childView: Views.ERequest,
initialize: function () {
this.render();
},
ui: {}
});
});
问题是:我知道必须加载页面才能使用这些插件(在本例中是jquery-asPieProgress)。那么,如何在整个页面呈现后加载这些脚本文件..因为如果我使用 define([..],function(..){}); 或 要求(..) 。正如我所说,脚本之前已加载,它们不会执行任何操作。
希望它很清楚。感谢
解
嗯,我想这取决于你如何构建你的应用程序。就我而言,我有一个内置典型路由器逻辑的模块。好吧,在同一个文件中,我添加了(最后)一个超时为100的函数,我需要我需要的元素。
var app = require('App');
app.module('CRouter', function (CRouter, App, Backbone, Marionette, $, _)
{ ... router logic ...});
/**
* Load all the files needed in template
*/
setTimeout(function() {
require(['menu', 'menubar', 'sidebar', 'gridmenu', 'configcolors', 'configtour', 'breakpoint', 'asScrollable'],
function() { ... run whatever which needs these libs ... }
);
}, 100);
您可以在此处查看并清除示例:http://requirejs.org/docs/api.html#afterload