javascript - knockout 改变一个变量的值

标签 javascript knockout.js knockout-3.0

我正在尝试在 knockout 中编辑一个用户,但是发生了这种情况,我得到了该元素,并将其在查询中发送到 Controller ,该 Controller 以 JSON 形式返回我的(对象) 我将该对象保存在这个变量中:

var ViewUsuarios = function () {
     self.dato = ko.observableArray();
      var usuariosUri = '/api/Usuarios/';
      var rolesUri = 'api/Rols/';

function ajaxHelper(uri, method, data) {
    self.error('');
    return $.ajax({
        type: method,
        url: uri,
        dataType: 'json',
        contentType: 'application/json',
        //Strinfy convierte una cadena de tipo javascript a objetos tipo JSON
        data: data ? JSON.stringify(data) : null

    }).fail(function (jqXHR, textStatus, errorThrown) {
        self.error(errorThrown);
    });
}

}

一切正常,但是当我这样做时:

 ajaxHelper(usuariosUri + item.ID, 'GET').done(function (data) {
        //alert(JSON.stringify(data));
        self.upUsuario(data); <- Here i have the user
    });

    ajaxHelper(rolesUri + item.RolId,'GET').done(function (data) {
        self.dato(data); <- Here works i have the correct ROL
        alert(JSON.stringify(self.dato())+"Correcto ");
    });
        alert(JSON.stringify(self.dato())+"Incorrecto"); <- Here don't work at first click is null and second have the after element

不知道错误在哪里

最佳答案

那是因为:

  • alert(JSON.stringify(self.dato())+"Incorrecto");被同步调用。
  • self.dato(data); alert(JSON.stringify(self.dato())+"Correcto ");被异步调用。
<小时/>

所以实际的执行顺序是:

  1. ajaxHelper(usuariosUri + item.ID, 'GET')
  2. ajaxHelper(rolesUri + item.RolId,'GET')
  3. alert(JSON.stringify(self.dato())+"Incorrecto");
  4. self.upUsuario(data);
    self.dato(data); alert(JSON.stringify(self.dato())+"Correcto ");

self.dato虽然 3 指的是 self.dato,但直到 4 才会被初始化。 .
这就是为什么self.dato第一次点击时为空。
也许在第二次点击时,self.dato包含 ajaxHelper 的先前结果.

关于javascript - knockout 改变一个变量的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29347850/

相关文章:

javascript - 遍历嵌套的 Javascript 对象

javascript - 替换字符串中的最后一个单词

javascript - 在 AngularJS 中创建和访问全局常量

javascript - 选择html格式的标签

javascript - 在 Knockout 中初始化时调用组件函数

javascript - 绑定(bind)到过滤对象属性剔除嵌套 foreach

asp.net-mvc - 具有适当 knockout 绑定(bind)的网格小部件

javascript - 过滤结果集时如何避免多个 if/else

javascript - 如何在 knockout js 中使复选框的标签可点击?

javascript 弹出窗口不会弹出,因为绑定(bind)已经分配