MVC数组和数组之间的区别

6

我一直在查找Google地图API中MVCArrayArray之间的差异,但没有找到实质性的区别。

我有点明白MVCArray是一个更好的选择,因为它能追踪到变化(某种方式),并且有一些特殊的事件。而且,一些相同的方法有略微不同的名称,例如array.lengthMVCarray.getLength()

但是,可以有人用通俗易懂的术语解释这两者之间的明显差异吗?如果您能提供一些简单的示例,那就更好了,以便更容易理解。

谢谢!


这可能是我找到的最好/唯一的解释。 - duncan
2个回答

7
为了解释MVCArrays,理解MVCObjects是很重要的。 MVCObject 是谷歌地图构建的“基石”之一。它像一个普通对象一样,具有其属性的设置器和获取器(到目前为止没有什么特别之处),但它的特殊之处在于:
  1. 您可以添加监听器以检测任何属性何时更改(使用set方法)并执行回调函数
  2. 您可以将其任何属性绑定到其他MVCObject的属性(或继承自此类的任何类)
  3. 其他MVCObjects(或继承自此类的任何类)的属性可以绑定到当前对象中的属性。
因此,基本上,MVCObjects是可观察-可绑定对象。 MVCArray 继承自MVCObject,因此您可以设置或获取其属性,绑定其中一些属性,被其他对象绑定等等。但是,它还实现了一些额外功能:
  • 它实现了几种您可以在本机javascript数组中使用的方法,例如push,pop,forEach等,因此多个google.maps方法可以接受MVCArray或本机数组,因为它将使用相同的方法遍历它们。
  • 它具有一个数组属性(您可以使用getArray方法访问该属性),该属性是本地js数组。上述类似于数组的方法转发到此数组。
  • 它实现了一组事件,因此您可以检测底层数组中的元素何时被设置,删除或更改。
因此,基本上,MVCArrays是可观察数组。由于它继承自MVCObject,所以它们的属性也是可绑定的。

谢谢。你有什么想法为什么当我使用push来操作MVCarray时,只能推入单个项目,而不能推入多个项目。 - lazy bum
文档中指出它只能插入一个元素,就像Array.push一样。如果要插入多个元素,您可以使用Array.concat,但MVCArray没有这样的方法。 - ffflabs

0

感谢您的输入。从我所阅读和尝试过的使用arrayMVCarray存储不同坐标来更改折线的方法中,我发现:

  • 由于MVCarray附有事件(insertremoveset),因此当我更改任何值时,该线会立即更新并且旧线消失。

  • 当更改array中的值时,新线也会出现,但旧线会保留。

因此,最好使用MVCarray。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接