1

我正在使用 Web 服务来填充选择列表,现在我需要对许多选择列表执行相同的操作,最好使用相同的方法来尝试限制代码量。这是我用来进行 Web 服务调用的方法:

function GetColourReferences(self) {
    $.ajax({
        async: false,
        cache: false,
        type: 'GET',
        url: '/GetColourReferences',
        success: function (data) {
            self.colourReferences(data);
        }
    });
}

我已经尝试过类似于以下的方法,但我无法让它工作 - 甚至可能吗?

function GetReferences(self, list, refUrl) {
    $.ajax({
        async: false,
        cache: false,
        type: 'GET',
        url: refUrl,
        success: function (data) {
            list(data);
        }
    });
}

我是这样称呼它的(我正在使用 Knockout):

GetReferences(self, self.colourReferences, '/GetColourReferences');

谢谢你看:)

4

1 回答 1

0

1)不管你的借口是什么,听听别人的提示永远不要使用同步调用,特别是如果你的后端处理速度很慢或者你有一些凌乱的用户界面要求。

2)理清你的闭包并学习如何确定对象的范围方法,你会解决你的问题,但我会很好,并为你指明正确的方向。

3)这不起作用,因为您传递了对函数的引用,而不是对对象方法的引用,所以巧妙地称为 self (WTF 你听说过语义)那个备用列表是失去对象范围的函数,并且这就是问题所在!

function GetReferences(self, list, refUrl) {
    $.ajax({
        async: false,
        cache: false,
        type: 'GET',
        url: refUrl,
        success: function (data) {
            list.call(self, data);
        }
    });
}

希望有所帮助。

于 2013-02-10T12:53:11.997 回答