如何传递元素参数给require.js定义调用
How to pass element parameter to require.js define call?
我有一个页面,它被分割成动态加载的"小部件"- JS与require.js, HTML &CSS与自定义JS。这是特别方便的,因为它允许每个小部件定义自己的JS需求。
例如:define(['jquery', 'mustache'], function($, Mustache) { ...
然而,为了将小部件JS功能定位到正确的元素中,我需要将小部件根元素传递给javascript,该元素加载了require.js,这是require.js不支持的……:/
我目前拥有的是这样的东西,其中定义调用返回一个函数,做渲染…
// Example.js
define(['jquery'], function($) {
return function($el) {
// Render the widget here to "$el"
$el.html('asdsadads');
}
});
…它由require调用运行…
require(['js/example'], function(render) { render($el); });
…对于简单的结构可以工作,但对于更复杂的小部件,init函数开始膨胀,这使得它不那么漂亮,更难阅读(也更容易出现bug)。
最理想的情况是这样的…
// Example.js
define(['jquery'], function($) {
if() { // Check for route and/or other modifiers (is logged in etc)
$el.html('asdasdasd');
} else {
$el.html('qwerty');
}
});
…实际的功能直接在define调用中。不幸的是,据我所知,没有办法通过require调用传递元素,就像这样…
define(['jquery'], function($, $el) {
那么,男人该怎么做呢?是否有一种模式,我可以使用某种方式将元素干净地传递给定义调用?还是说我只能求助于这个丑陋的复试丛林?
定义块的思想是返回可以在代码的另一部分中使用的类或函数。这鼓励了可重用的、DRY的、模块化的编码风格。
对于define模块来说,在创建时知道$el是没有意义的。真正有意义的是,您返回一个用$el实例化的类。这样您的模块是可重用的,并且您将控制的负担返回给您的应用程序,而不是模块本身。
模块及其使用的简单示例:
define(['jquery'], function($) {
var MyClass = function(args){
this.initView(args.$el);
}
MyClass.prototype.initView($el){
//init your view
}
return MyClass;
});
当你可以像这样使用这个模块时:
define(['path/to/myClass'], function(MyClass) {
var myView = new MyClass({$el: $('.my-selector')}),
myOtherView = new MyClass({$el: $('.my-other-selector')});
});
相关文章:
- 要求未定义JS回调参数
- 在自定义mean.io包中使用angular-chart.js作为依赖项
- 查看JS对象的所有键,甚至是getter定义的键
- 可以't计算自定义谷歌地图的js
- 无法获取属性'Id'使用Knockout.js的未定义或空引用API
- vaadin:使用自定义布局集成angular js
- Cordova:未捕获引用错误:chbrody没有使用SQLitePlugin.js定义PhoneGap
- JS定义的方法仅在语句的一部分中等于NaN
- Ember.js-定义一个全局函数,该函数可以向操作返回值
- 窗口未使用对等.js定义
- 有没有办法使用 gulp 删除 require.js 定义([..]) 包装器的所有实例
- 三个js定义了地理坐标轴
- 为pdf.js定义gulp文件
- 如何用Three.js定义一个相对于矢量路径的粒子云
- Vue.js:定义一个服务
- 如何获取使用Raphael.js定义的元素的形状名称
- 反应.js:定义自定义属性
- 如何传递元素参数给require.js定义调用
- 使用c3.js定义类别轴
- JS定义属性和原型