2

我正在重写我前段时间写的一个 JavaScript 库。其目的是将对象数组显示为表格,无需服务器通信即可对其进行排序、过滤和编辑。

当前的解决方案“污染”了具有附加属性的对象,这些属性是控制显示所需的。原始对象可能看起来像这样

{"name":"...","lastname":"...","age":27}

然后它有像这样的附加属性

{"name":"...","lastname":"...","age":27,"TTMDecode":true,"TTMChildren":[]}

另一种解决方案可能是仅包装原始对象,然后使用这些包装器。

{"decode":true,"children":[],"data":{"name":"...","lastname":"...","age":27}}

我不确定哪种解决方案更可取。 使用第二种解决方案,如果原始对象被更改,则更容易将原始对象返回到服务器,但它会使 JavaScript 引擎的对象数量增加一倍。

该解决方案能够处理超过 20.000 个对象,并且在当前浏览器中运行速度很快。但是 40.000 个对象会是个问题吗?

我希望我能很好地解释我的担忧。

问候

4

2 回答 2

2

您需要的是设计模式。你碰巧已经在使用一个。

首先,您不应该用视图所需的东西污染模型。这与说您不能在模型上使用便捷方法或计算属性不同。一个表明你做错了的危险信号是模型上是否有特定于你的视图层的东西,比如 DOM。我不知道TTMDecode你的例子是什么......

其次,您已经在使用设计模式。您正在使用合成装饰您的模型对象。

有关装饰器模式的描述,请参见 this ,有关
Composition 的描述,请参见 this 。

我认为你做得很好。

于 2012-07-10T20:27:09.947 回答
2

首先,关于您的体系结构问题:为什么不使用两个属性display和创建一个父对象data?你不应该因为担心性能而限制你的架构,如果它有效果,你会在测量性能时注意到它。

var obj = {
    display: {
      // display data
    },
    data: {
      // personal data
    }
);

这隐含地回答了关于对象计数的问题,这通常无关紧要(如果对象本身并不大,它不会影响你的表现)

于 2012-07-10T20:28:29.047 回答