当前位置: 首页 > 面试题库 >

带有XML ajax的BackboneJS

陈兴朝
2023-03-14
问题内容

这是来自JS新手的两部分问题。

因此,我正在尝试遵循Thomas Davis的教程,使用requireJS创建一个主干应用程序。

  1. 如何通过对以XML提供数据的服务器的ajax调用来创建Backbone集合?collections.fetch()似乎期望使用JSON后端。

  2. 在尝试某些事情时,我得到了以下代码,其中在Ajax成功回调中填充集合“ bookStore”时页面没有刷新。

这是我到目前为止所走的路。

    var bookListView = Backbone.View.extend({
    el: $("#books"),
    initialize: function () {
        thisView = this;
        $.ajax({
            type: "GET",
            url: "books.xml",
            dataType: "xml",
            success: function (data) {
                console.log(data);
                $(data).find('book').each(function (index) {
                    var bookTitle = $(this).find('name').text();
                    bookStore.add({ title: bookTitle });

                    console.log(seid);
                });
                thisView.collection = bookStore;
                thisView.collection.bind('add', thisView.tryBind);

            }
        }).done(function (msg) {
            alert("Data retrieved: " + msg);
        });

        this.collection = bookStore;
        this.collection.bind("add", this.exampleBind);
        this.collection.bind("refresh", function () { thisView.render(); });
        /*
        // This one works!
        bookStore.add({ name: "book1" });
        bookStore.add({ name: "book2" });
        bookStore.add({ name: "book3" });
        */
    },
    tryBind: function (model) {
        console.log(model);
    },
    render: function () {
        var data = {
            books: this.collection.models,
        };
        var compiledTemplate = _.template(bookListTemplate, data);
        $("#books").html(compiledTemplate);
    }
});

在这里,“初始化”函数中的成功回调似乎是在正确处理数据并将其添加到集合中。但是,页面没有刷新。

当我逐步浏览Firebug控制台时,页面会刷新。我该如何解决这个问题?


问题答案:
  1. 您可以覆盖默认parse功能以提供XML支持。它应该返回转换为JSON的数据http://backbonejs.org/#Collection-parse

  2. 将渲染绑定到reset事件,而不是refreshBackbone <1.0或syncBackbone> = 1.0 的事件

它可能看起来像这样

var Book = Backbone.Model.extend();

var Books = Backbone.Collection.extend({
    model: Book,
    url: "books.xml",

    parse: function (data) {
        var $xml = $(data);

        return $xml.find('book').map(function () {
            var bookTitle = $(this).find('name').text();
            return {title: bookTitle};
        }).get();
    },

    fetch: function (options) {
        options = options || {};
        options.dataType = "xml";
        return Backbone.Collection.prototype.fetch.call(this, options);
    }
});

var bookListView = Backbone.View.extend({
    initialize: function () {
        this.listenTo(this.collection, "sync", this.render);
    },

    render: function () {
        console.log(this.collection.toJSON());
    }
});

var bks = new Books();
new bookListView({collection: bks});
bks.fetch();

还有一个演示http://jsfiddle.net/ULK7q/73/



 类似资料:
  • 现在我的问题是,如何在自定义的而不是自定义的中重写方法?我没有在这里公布我的代码,因为它与链接的代码本质上是相同的,只是我需要为子创建一个自定义的来代替,这样它就可以按照“pptang”的答案所述进行正确的度量。 否则,有没有比在第二个RecyclerView中使用1个RecyclerView更好的方法?只能有1个RecyclerView使用上述列表和每个中唯一项的网格填充活动/片段吗?

  • 问题内容: 两者之间到底有什么区别 和 第一个只是加快字段初始化速度的捷径吗?有性能方面的考虑吗? 问题答案: 第二种形式总是创建一个空的地图。 第一种形式是地图文字的特殊情况。地图文字允许创建 非空 地图: 现在,您的(通用)示例: 是没有初始值(键/值对)的地图文字。它完全等同于: 此外,这是为地图指定初始容量(大于初始分配的元素数量)的唯一方法。例: 将创建一个地图,该地图具有足够的空间来容

  • 问题内容: 查看量角器文档,我发现有一个选项可以不使用Selenium服务器使用flag 来运行量角器。 使用硒服务器和不使用硒服务器运行量角器测试之间的区别是什么,除了后者仅支持Chrome,Firefox? 问题答案: 首先,目前,您有 5种不同的内置选项/方式来连接浏览器驱动程序 : 指定在本地启动Selenium独立服务器 指定连接到正在运行的硒服务器(本地或远程) 设置并连接到Sauce

  • 代码: 上下文:尝试在JavaScript中使用 编辑: 完整代码: 编辑: 无法获取

  • 在GlassFish Server开源版本3.1中部署。1(构建12): 引起原因:java.security.PrivilegedActionExcema:com.sun.xml.bind.v2.runtime.IllegalAnnotationsExceptions: 1个IllegalAnnotationExceptions的计数没有ObjectFactory与@XmlElementDecl

  • 问题内容: 我正在尝试制作一个支持cookie的URLConnection。根据文档,我可以使用: 我无法使此代码正常工作,然后我看到这仅适用于API 9(2.3)。但是,在较旧的模拟器中使用CookieManager不会出现错误,CookieManager存在,但是无法构造。有什么方法可以使此版本适用于早期版本?我试过了: 但这不起作用。 问题答案: 我能够使用Ian Brown的CookieM