KnockoutJS.Mapping.FromJS-可观察数组-删除不起作用

KnockoutJS.Mapping.FromJS - Observable array - Remove not working

本文关键字:删除 不起作用 数组 观察 Mapping FromJS- KnockoutJS      更新时间:2023-09-26

使用以下代码,我希望无论何时ko.mapping.fromJS(response.results,viewModel),都能将任何新对象添加到viewModel中,并删除任何删除的对象被调用。但它只添加了新对象,旧对象在html:中保留了下来

var viewModel = ko.mapping.fromJS([],
{
        key: function(data) {
            return ko.utils.unwrapObservable(data.Id);
        },
        create: function (options) {
            return new newConfigModel(options.data);
        }
});
var newDispModel = function (data) {
        ko.mapping.fromJS(data, {}, this);
        this.DisplayTitle = ko.dependentObservable(function() { return GetDisplayTitle(this); }.bind(this));
        this.StatusClass = ko.dependentObservable(function () { return GetStatusClass(this); }.bind(this));
        this.FeedIndexShadow = "";
        this.FeedIndex = ko.dependentObservable(function() { return GetNewFeedIndex(this); }.bind(this));
    };
$(document).ready(function () {
    function loadConfigurations() {
        var url = "/Home/GetItems/";
        $.ajax({
            url: url,
            success: function(response) {
                if (response.success) 
                {
                    ko.mapping.fromJS(response.results, viewModel);

最后一部分。。。。

<div class="container" id="feeds"  data-bind="foreach: viewModel">
    <div data-bind="attr: { 'class': StatusClass, 'id': FeedIndex }" style="display: none">
        <div class="configRow">
             <h2 class="title" data-bind="text: DisplayTitle"/>
        </div>
    </div>
</div>

我错过了什么?这与有关吗?我是不是只是以某种方式手动从可观察对象中删除"死"对象?还是我完全误解了ObservableArrays的功能?

这里有一个显示交互的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 deleted
23 - Is changed to 24
34 - Is deleted
45 - Is added

--

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

http://knockoutjs.com/documentation/plugins-mapping.html