【问题标题】:Key function in mapping options not working映射选项中的关键功能不起作用
【发布时间】:2012-12-19 16:10:59
【问题描述】:

我无法理解 KnockoutJS 中映射插件的映射选项中的 key 函数。根据文档,我了解 key 函数将告诉映射插件使用什么属性来确定对象是新的还是旧的。

他们使用这个例子...http://knockoutjs.com/documentation/plugins-mapping.html#advanced_usage

但它说..

这样,每次映射插件检查 children 数组中的项目时,它只会查看 id 属性来确定对象是完全替换还是只需要更新。

“需要更新”是什么意思?它会更新整个children 对象吗?它只会更新children 对象中已更改的属性?我很困惑。

他们的例子很简单,我无法让它与更真实的数据样本一起工作。这是我的问题的 jsFiddle...http://jsfiddle.net/rQfpr/1/

在我的示例中,我试图仅替换 self.movies[1] 中的 UserMovies 对象。

【问题讨论】:

    标签: javascript knockout.js knockout-mapping-plugin


    【解决方案1】:

    这里有一个 JSFiddle 可以帮助你理解交互:

    注意:映射中的“更新”条目只是为了让我可以登录到控制台……除非您需要自定义更新的发生方式,否则不需要它。

    http://jsfiddle.net/jearles/wgZ59/49/

    点击“加载矩阵”,它将显示:

    12
    23
    34
    

    单击“更改”,它将重新加载矩阵:

    24
    45
    

    查看我发布的控制台消息,您会看到:

    Creating 1
    Updating 1
    Creating 2
    Updating 2
    Creating 3
    Updating 3
    Updating 2
    Creating 4
    Updating 4
    

    这确认了映射插件正在执行的操作。

    最初:

    12 - Is created and updated
    23 - Is created and updated
    34 - Is created and updated
    

    更新时:

    12 - Is deleted
    23 - Is changed to 24
    34 - Is deleted
    45 - Is added
    

    --

    “键”条目通过将特定属性指定为“键”来帮助映射插件确定哪些条目是新的或现有的;否则会比较整个对象是否相等。

    【讨论】:

    • key 是否用作整个对象的比较?所以在我的情况下,Id 是用来比较 UserMovies 项目还是整个电影集合?该文档使它看起来像是将使用 Id to 字段来比较 UserMovies 项目,而不是整个集合。
    • 它用于比较 observableArray 中的各个项目...在您的情况下为 UserMovie 对象。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-30
    • 1970-01-01
    • 2023-01-29
    • 2019-07-21
    • 1970-01-01
    • 2011-03-31
    • 2011-12-13
    相关资源
    最近更新 更多