【问题标题】:Dynamically pass property reference from object looping key从对象循环键动态传递属性引用
【发布时间】:2015-08-10 15:46:03
【问题描述】:

如何动态地将属性引用作为方法参数传递?

这是 ajax success 函数响应数据的样子:

{
   users: {
      data: {}
   },
   countries: {
      data: {}
   },
   states: {
     data: {}
   }
}

这是我以前如何存储数据的示例:

var users = ko.observable();  
var countries = ko.observable();  
var states = ko.observable();

var store = function(data, observable)
{
    observable(data);
}

$.ajax({
   //... ajax options...

   success: function(response)
   {
       // This is how i store the data previously
       store(response.users.data, users);
       store(response.countries.data, countries);
       store(response.states.data, states);
   }
});

这是我迄今为止尝试过的示例:

$.ajax({
   //... ajax options...

   success: function(response)
   {
       // This is how i want to achieve
       ko.utils.objectForEach(response, function(key, data)
       {
           store(data.data, key);
       });
   }
});

但不幸的是,我只是将文本字符串传递给 store 方法的第二个参数。

任何帮助和建议将不胜感激!

谢谢。

【问题讨论】:

    标签: javascript knockout.js knockout-2.0 knockout-mvc knockout-3.0


    【解决方案1】:

    将它们设为对象的属性,然后使用字符串:

    var obj = {
        users: ko.observable(),
        countries: ko.observable(),
        states: ko.observable()
    };
    
    var store = function(data, observable)
    {
        var prop = obj[observable];
        if (prop) { // Just being defensive
            prop(data);
        }
    };
    
    $.ajax({
       //... ajax options...
    
       success: function(response)
       {
           var key;
           for (key in response) {
               store(response[key].data, key);
           }
       }
    });
    

    【讨论】:

    • 这就是我要找的!谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-10
    • 2012-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多