Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在AJAX API调用后刷新淘汰网格_Javascript_Asp.net Mvc_Knockout.js - Fatal编程技术网

Javascript 如何在AJAX API调用后刷新淘汰网格

Javascript 如何在AJAX API调用后刷新淘汰网格,javascript,asp.net-mvc,knockout.js,Javascript,Asp.net Mvc,Knockout.js,我在MVC5/淘汰赛环境中工作。我的视图最初是从标准MVC 5控制器提供的ViewModel加载的。我有一个击倒网格作为这个视图的一部分。根据ViewModel内容正确填充网格 在用户按钮按下时,进行Web API调用并成功返回。我想使用API调用返回的数据来更新绑定到敲除网格的敲除可观察数组。我可以看到敲除可观测数组已正确更新,但敲除网格从未刷新。我使用API调用的结果写入的knockout observalbe数组与第一次加载视图时写入的数组相同 这是.cshtml视图顶部的代码: <

我在MVC5/淘汰赛环境中工作。我的视图最初是从标准MVC 5控制器提供的ViewModel加载的。我有一个击倒网格作为这个视图的一部分。根据ViewModel内容正确填充网格

在用户按钮按下时,进行Web API调用并成功返回。我想使用API调用返回的数据来更新绑定到敲除网格的敲除可观察数组。我可以看到敲除可观测数组已正确更新,但敲除网格从未刷新。我使用API调用的结果写入的knockout observalbe数组与第一次加载视图时写入的数组相同

这是
.cshtml
视图顶部的代码:

<script>
    $(function () {
        var inputData = ko.mapping.toJS(@Html.Raw(HelperFunctions.ToJson(Model)));
        var dom = document.getElementById("AWBSNode");
        var obj = new AreasModel(inputData);
        ko.applyBindings(obj, dom);
    });
</script>
下面是我的视图模型/网格配置/绑定的相关JS

var AreasModel = function(data) {
    var self = this;
    var apiCall = new APICaller();
   .
   .
   .
   self.AllAWBSAreas = ko.observableArray(
       ko.utils.arrayMap(data.Areas, function(x) {
          return new NewAWBSAreaModel(x);
       })
   );
  .
  .
  .
  this.gridOptions = {
        footerRowHeight: 35,
        beforeSelectionChange: function (rowItem) {
           self.selectAreaToEdit(rowItem); 
        },
        disableTextSelection: false,
        keepLastSelected: false,
        multiSelect: false,
        displaySelectionCheckbox: false,
        data: self.AllAWBSAreas,
        columnDefs: [
            { field: 'Name', displayName: 'Name' }, 
            { field: 'Description', displayName: 'Description' }
        ]
    };
  .
  .
  .
下面是我所做的API调用(我使用的是一个包装器函数,但这部分工作正常,因为我进入了成功路径,数据就在那里)

apiCall.CallAPI(
    url,
    dom,
    true,
    null,
    function (successData) {
       self.AllAWBSAreas(ko.utils.arrayMap(successData.Items, function (x) {
           return new NewAWBSAreaModel(x);
       });
    );
我还尝试了另一种方法

apiCall.CallAPI(
    url,
    dom,
    true,
    null,
    function (successData) {
        self.AllAWBSAreas(successData.Items); 
        .
        .
        .
        .

我尝试在
AllAWBSAreas
实体上调用
valueHasMutated()
。API调用及其返回数据没有问题,因为此模式在项目的所有其他方面都工作正常。我看到的症状是UI中的网格“受影响”但未更新。顶部整洁的蓝色横幅变为空白,但数据保持不变。

答案是ladda微调器有问题。如果微调器连接到微调器网格,则微调器网格将不会更新。我将微调器移到附近的一块UI上,所有操作都正常。感谢那些花时间查看微调器的人t/帮助解决这个问题。

我采用了一个更简单的版本来描述您的情况,并创建了这个提琴…您的相同方法在那里似乎确实有效。您能在提琴上重现它吗?嗨,山姆,我看了您的建议。我修改了设置,尝试使用手动生成的数据来更新淘汰网格,而不是API调用生成的数据。网格用手动数据干净地更新了。我尝试了另一个测试。我在同一个视图中声明了一个简单的引导表,绑定到一个单独的敲除可观察数组。我进行了原始API调用,并用API调用数据更新了驱动引导表的可观察数组,而且效果也很好。因此,只有敲除网格不会更新我在API调用的上下文中。我还应该说,我是用Chrome运行的,在开发工具中,当我尝试更新驱动敲除网格的敲除可观察对象时,没有出现错误。
apiCall.CallAPI(
    url,
    dom,
    true,
    null,
    function (successData) {
        self.AllAWBSAreas(successData.Items); 
        .
        .
        .
        .