首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在div上应用javascript函数

在div上应用javascript函数
EN

Stack Overflow用户
提问于 2015-03-02 17:44:32
回答 1查看 70关注 0票数 0

我想将一个变量放在div上,并由该div下的所有dojo小部件应用和继承。

这可行吗?

例如

代码语言:javascript
运行
复制
<div shaper="Contextual"> 
<textarea ..../> 
<select multiple data-dojo-type="dijit/form/MultiSelect"> 
.... 
</div> 

我希望shaper支持的功能应用于div中包含的所有小部件。附注:"shaper“是一个自定义模块,用于对阿拉伯数字进行数字整形。

EN

回答 1

Stack Overflow用户

发布于 2015-03-02 21:59:45

这是可能的,但不是开箱即用的。

你可以这样写:

代码语言:javascript
运行
复制
require(["dojo/query", "dojo/domReady!"], function(query) {
  query("[shaper]").forEach(function(shaper) {

  });
});

这将查询所有具有shaper属性的元素并对其进行循环。在循环中,您必须检索shaper属性的值(例如Contextual),您可以使用getAttribute()函数来执行此操作,例如:

代码语言:javascript
运行
复制
var shaperModule = shaper.getAttribute("shaper");

现在您有了要加载的模块的名称,所以您可以在循环中编写类似以下内容:

代码语言:javascript
运行
复制
require([shaperModule], function(shaperModule) {

});

这将使用AMD检索Contextual模块。现在剩下的就是将shaper功能包含到<div>中的所有小部件中了。

首先,使用dijit/registry::findWidgets()可以检索特定DOM节点内的所有小部件,在本例中可以用它来检索dijit/form/MultiSelect小部件:

代码语言:javascript
运行
复制
registry.findWidgets(shaper);

然后,您可以遍历找到的小部件数组,并使用dojo/_base/lang::mixin()使用另一个对象的内容来扩展另一个对象,例如:

代码语言:javascript
运行
复制
registry.findWidgets(shaper).forEach(function(widget) {
    lang.mixin(widget, shaperModule);
});

例如:http://jsfiddle.net/zLv7cvzt/

虽然这可能不完全有效(如果模块不存在,或者小部件中的小部件怎么办,dijit/registry::byId()没有检测到这些小部件),但它确实让您了解了如何实现它。

回答你的第二个问题,它是否可行,我会说这取决于。如果您用另一个这样的小部件扩展一个小部件,结果可能会非常奇怪,因为所有小部件都是从提供小部件生命周期的dijit/_WidgetBase扩展而来的,您可以混合这两个小部件的生命周期。

此外,如果您最终执行此操作并收到错误,如果您不熟悉自定义代码,则将很难对其进行调试。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28806631

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档