Javascript 敲除可观察数组未更新从数组中删除元素的视图

Javascript 敲除可观察数组未更新从数组中删除元素的视图,javascript,arrays,knockout.js,Javascript,Arrays,Knockout.js,这是我的视图模型代码 var TopicsViewModel = function() { var self = this; var fakeTopicData = [ ]; self.createProfile = function () { alert("came to create profile"); }; self.editProfile = function () { alert("came to edit profile"); }; self.rem

这是我的视图模型代码

var TopicsViewModel = function() {
var self = this;

var fakeTopicData =
 [

 ];


self.createProfile = function () {
    alert("came to create profile");
};

self.editProfile = function () {
    alert("came to edit profile");
};

self.removeProfile = function (profile) {
    alert("came to remove profile");
    fakeTopicData.pop();
    self.topicsArr(fakeTopicData);
};



var refresh = function() {
    self.topicsArr = fakeTopicData;

};


self.topicsArr = ko.observableArray([]);
refresh();

  };


  ko.applyBindings(new TopicsViewModel());
以下是我的视图html:

<hr /> 
<hr /> 

<table  class="table table-striped table-bordered table-condensed">
    <tr >
        <th>Area</th>
        <th>Name</th>
        <th>Link</th>
        <th>Description</th>
        <th>Why</th>

    </tr>
    <tbody data-bind="foreach : topicsArr">   
        <tr>
            <td data-bind="text :area"> </td>
            <td class=""><a data-bind="text:name, click:$parent.editProfile"></a></td>           
            <td data-bind="text:link"> </td>
            <td data-bind="text:desc">  </td>
            <td data-bind="text:why" ></td>
            <td><button class="btn btn-mini btn-danger" data-bind="click:$parent.removeProfile">remove</button></td>
        </tr>
    </tbody>

</table>

 <script src="~/Scripts/Topic.js"></script>


地区 名称 链接 描述 为什么? 去除
该视图最初显示my fakeData数组中的所有主题。 单击“删除”按钮时,我试图从数组中删除一个元素,希望视图刷新,不再显示删除的项。但是,视图仍然显示所有3个主题

有人能指出我可能做错了什么吗。
我花了很长时间研究stackoverflow上的其他类似查询,但我仍然被卡住了。非常感谢您对这个问题的深入了解。

您正在用一个在刷新方法中不可见的数组替换名为topicsarr的可观察数组

改变

var refresh = function() {
    self.topicsArr = fakeTopicData;

};


您正在将名为topicsarr的可观察数组替换为刷新方法中不可观察的数组

改变

var refresh = function() {
    self.topicsArr = fakeTopicData;

};


您的代码中有两个问题。
首先,您要在
刷新
功能中使用非可观察阵列或普通阵列设置可观察阵列
主题阵列
。使用
self.topicsArr(fakeTopicData)

Second,在函数
removeProfile
中,您正在使用
pop()
删除
profile
元素。来自KnockoutJS文档:

myObservableArray.pop()从数组中删除最后一个值并 归还

因此,最好使用
remove(item)
并将您的
profile
元素传递给它,或在数组中循环并移除该特定项

myObservableArray.remove(someItem)删除所有相等的值 someItem并将其作为数组返回


您的代码中有两个问题。
首先,您要在
刷新
功能中使用非可观察阵列或普通阵列设置可观察阵列
主题阵列
。使用
self.topicsArr(fakeTopicData)

Second,在函数
removeProfile
中,您正在使用
pop()
删除
profile
元素。来自KnockoutJS文档:

myObservableArray.pop()从数组中删除最后一个值并 归还

因此,最好使用
remove(item)
并将您的
profile
元素传递给它,或在数组中循环并移除该特定项

myObservableArray.remove(someItem)删除所有相等的值 someItem并将其作为数组返回


非常感谢!!我一直盯着我的代码看,但没听清楚。这解决了我的问题,我的视图现在随着数组的更改而刷新。非常感谢!!我一直盯着我的代码看,但没听清楚。这解决了我的问题,我的视图现在随着数组的更改而刷新。非常感谢。您所提到的确实是问题所在,在做出您建议的更改后,它现在起作用了。@RekhaJayaram欢迎您。如果我的代码运行良好,请您将其标记为应答。非常感谢。您所提到的确实是问题所在,在做出您建议的更改后,它现在起作用了。@RekhaJayaram欢迎您。如果我的代码运行良好,请您将其标记为答案