我正在尝试采用现有的工作代码库并使用 JavaScript 使其面向对象。我的系统采用一对多关系中包含组和项目的JSON ,并在页面上将其可视化。这些项目可以移动到不同的组中,并且它们在这些组中的位置也需要计算。因此,需要建立了解周围团体和门票的活动。
我正在使用John Resig 的简单 JavaScript 继承设置来建立两个类,Item
并且Group
. 当 eachItem
被实例化时,它会引用它的 parent Group
。当我想建立我的事件时出现了我的问题,并且最容易通过以下函数来解释:
var Group = Class.extend({
...
// Calculate where to place the new item within the group
calculate_new_position: function(item) {
var pos = -1;
// Loop through all DOM items in groups body
$(".item", this.elBody).each(function(i) {
// Retrieve it's class object
var next = $(this).data("_obj");
// Calculating things using the class reference
var lowerPrio = item.tData.priority < next.tData.priority,
lowerId = item.id < next.id;
if(lowerPrio || lowerId) {
pos = i;
return false;
}
});
return pos;
},
...
)};
注意.data("_obj")
上面代码片段中的使用。本质上,当我需要对项目进行排序等操作时,我需要知道组中每个项目的 DOM(视图/控制器)对应的对象(模型)。现在,我可以建立我的Group
类,以便当我创建每个类时,我从我的(例如 so )Item
中添加对它的引用,然后我可以迭代实例而不是迭代 DOM 元素。但是,我认为我会遇到类似的问题,例如当我想将 an 移动到另一个时(因为不会知道)。Group
Group.items = [i1, i2...]
Item
Item
Group
Group
Item
长话短说:拥有一个在实例化时创建一个 DOM 元素然后又指向该类的类是否本质上是危险/幼稚/无意义的?这感觉像是循环依赖和一些递归的噩梦,但也许对对象的引用并不是一件可怕的事情。如果我正在做其他非常愚蠢的事情,并且有一个更简单的方法,那么也请指出这一点。