【问题标题】:KnockoutJS/AJAX update viewmodelKnockoutJS/AJAX 更新视图模型
【发布时间】:2012-06-08 17:48:24
【问题描述】:

目前正在使用 KnockoutJS。在此示例中,仅尝试从 ajax/json 提要(使用 twitter)更新可观察数组。

在尝试更新我的可观察数组 (currentTweets) 时,它似乎失去了“this”的范围。我已经尝试将绑定添加到各个地方,但没有这样的运气。

我得到的错误是:Uncaught TypeError: Cannot call method 'push' of undefined

我确定我在做一些愚蠢的事情,它正在行动中(没什么可看的!)

http://jsbin.com/oyuteb

我已经阅读了很多关于 Knockout 映射的内容,但还没有足够的信心去接受它!

所以,任何帮助或指导都会很棒。

谢谢

【问题讨论】:

    标签: ajax arrays knockout.js


    【解决方案1】:

    解决此问题的最简单方法是将视图模型的“this”代理到另一个变量中,以便在处理程序中可用。当 jquery ajax 调用成功处理程序时,上下文不同,因此 this 引用了其他内容。

    所以你会有

    function twitterViewModel() {
        var self = this;
        this.currentTweets = ko.observableArray([]);
        ...
    
        this.getTweets = function(){
    
            $.ajax({
                dataType: 'jsonp',
                url: 'http://search.twitter.com/search.json?callback=?&q=' 
                         + this.searchTerm() + '&rpp=50',
                success: function (data) {
                    $.each(data.results, function(i,tweet){
                        self.currentTweets.push({'keywords' : 'bugger'});
                    });
                }
            });
        }
    }
    

    您可以消除绑定调用并改用self。

    希望这会有所帮助。

    【讨论】:

    • 太棒了!谢谢你。我在许多示例中看​​到了“自我”的各种用法,但在我看来并不一致。我应该使用 self.currentTweets 等吗?
    • 这取决于你。有人将其命名为“那个”。请记住,如果您有多个具有多个 self 属性的嵌套闭包,它们可能会发生冲突。
    猜你喜欢
    • 1970-01-01
    • 2019-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多