2

我正在学习 Backbone.js 并尝试基于它构建简单的主题。我在functions.php中有这段代码来加载js:

    function load_js() {
      wp_enqueue_script('app-js', get_template_directory_uri() . '/app.js', array('backbone'));
      wp_localize_script('app-js', 'mechanics', array('ajaxurl' => admin_url('admin-ajax.php')));
    }

    add_action('wp_enqueue_scripts', 'load_js');

在 app.js 这个简单的代码来获取帖子:

(function($){
    var Post = Backbone.Model.extend({});

    var Posts = Backbone.Collection.extend({
            model: Post,
            url: mechanics.ajaxurl
    });

    var new_posts = new Posts;
    new_posts.fetch();
})

服务器端工作(我已经用 jquery 测试过)。如果认为问题出在 url 语句上。有人可以告诉我它应该是什么样子,或者 jQuery ajax 和 Backbone 同步 url 之间是否有区别?

工作 jQuery 版本

jQuery(document).ready(function() {
    var $ = jQuery;

    $.ajax({
    type: "GET",
    url: mechanics.ajaxurl,
    data: { action : 'mechanics_get_posts' },
    dataType: "json",
    success: function( response ) {
        alert( response );
        }
    });
});
4

2 回答 2

6

我需要添加数据来获取功能。最终代码如下所示:

var Post = Backbone.Model.extend({});

var Posts = Backbone.Collection.extend({
    model: Post,
    url: mechanics.ajaxurl
});

var new_posts = new Posts;
new_posts.fetch({
    data: { action: 'mechanics_get_posts' }
});
于 2013-01-30T12:26:31.713 回答
0

更新:确保加载了下划线和 jQuery。

Backbone.$ = jQuery,所以 Backbone.fetch() 是 jQuery.ajax({type: "GET"});

您集合中的 url 属性应该是一个字符串。我不熟悉机制,所以如果“mechanics.ajaxurl”作为字符串在窗口对象上并指向返回 JSON 的有效端点,它应该可以工作。

改变:

var new_posts = new Posts;

到:

var new_posts = new Posts();

然后,与 一样$.ajax,在您的fetch()方法中,您可以执行以下操作:

new_posts.fetch({
  success: function(collection, object, jqXHR) {
    your code...
  },
  error: function(jqXHR, statusText, error) {
    your code...
  }
});
于 2013-01-30T00:06:05.467 回答