Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Backbone.js 主干——嵌套类加载_Backbone.js - Fatal编程技术网

Backbone.js 主干——嵌套类加载

Backbone.js 主干——嵌套类加载,backbone.js,Backbone.js,我有一只狗,它有一个与之相关的品种。现在,我只有一个视图,叫做DogView。我正在Dog中实现解析方法,正如这个StackOverflow问题中指定的-> 但是,我遇到了一些问题。首先,我注意到,除非显式调用response[key].fetch,否则response[key]似乎不会被加载。其次,视图不会被重新渲染。我相信这是因为并没有像主干网的文档所宣称的那样,在fetch上触发change事件 我已将视图设置为this.listenTo模型,并在捕获事件时调用this.render。但是

我有一只狗,它有一个与之相关的品种。现在,我只有一个视图,叫做DogView。我正在Dog中实现解析方法,正如这个StackOverflow问题中指定的->

但是,我遇到了一些问题。首先,我注意到,除非显式调用response[key].fetch,否则response[key]似乎不会被加载。其次,视图不会被重新渲染。我相信这是因为并没有像主干网的文档所宣称的那样,在fetch上触发change事件

我已将视图设置为this.listenTo模型,并在捕获事件时调用this.render。但是,我一定是做错了什么,因为当我查看输出时,它似乎没有打印出对象(它应该打印出来,因为我在渲染方法中打印出来)

我正在使用backbone.js 1.0版。你要知道,我还是个新手。所以,请对我放松点。我做了一系列的研究,并试图通过查找其他已回答的问题来自己找出答案。在任何人谈论BackbonerRelations之前,我已经看过了,但我想在对基本框架还不太了解的情况下,跳到另一个框架中学习,这只会使问题更加复杂。:)无论如何,代码如下。我只是想把它全部贴出来,因为它非常基本

// The main view of the application
var App = Backbone.View.extend({

    // Base the view on an existing element
    el: $('#dogs'),

    initialize: function(){
        var dogs = new DogList();

        dogs.fetch({
            success: function(data){
                dogs.each(function(dog){
                    this.list = $('#dogsTempl');
                    var view = new DogView({ model: dog });
                    this.list.append(view.render().el);
                }, this);   // "this" is the context in the callback
            }
        });
    },

    render: function(){
        return this;
    }
});
new App();
--

--

--

--


没关系,我修好了。事件只是注册到错误的模型对象。我已将我的事件注册到DogView上的“this.model”,但在this.model.get('bride')上设置了更改的标志。因此,通过设置this.listenTo(this.model.get('bride')、'change',this.render()),它就像一个符咒一样工作

有人吗?此外,如果您有任何其他问题或任何事情,以便能够提供帮助,请告诉我。
var Dog = Backbone.Model.extend({
    defaults: {
        "class": "",
        id: 1,
        name: "Enter a name",
        breed: {},
        description: "Enter a description",
        age: "Enter an age",
        profile: null
    },
    urlRoot: "/rest/dog",
    model: {
        breed: Breed,
    },

    parse: function(response){
        for(var key in this.model)
        {
            var embeddedClass = this.model[key];
            var embeddedData = response[key];
            response[key] = new embeddedClass(embeddedData, {parse:true})
            console.log(response[key].toJSON());
            response[key].fetch();
            this.trigger('reset');
        }
        return response;
    }
});
var DogList = Backbone.Collection.extend({

        // Will hold objects of the Dog model
        model: Dog,
        url: '/rest/dog/user/'+ $('#userName').html()
});
var DogView = Backbone.View.extend({
    tagName: 'div',
    template: _.template($('#dogTemplate' ).html()),

    initialize: function(){
        this.listenTo(this.model, "reset", this.render);
        // Set up event listeners. The change backbone event
        // is raised when a property changes (like the checked field)
        if(!this.constructor.prototype.template) {
            this.constructor.prototype.template = _.template($('#dogTemplate' ).html());
            console.log('compile');
        }
    },
    render: function(){
        console.log(this.model.toJSON())
        // Create the HTML
        this.$el.html(this.template(this.model.toJSON()));

        // Returning the object is a good practice
        // that makes chaining possible
        return this;
    },

    editDog: function(){
        this.model.toggle();
    }
});
var Breed = Backbone.Model.extend({
    urlRoot: "/rest/breed",
    defaults: {
        id: null,
        history: "Please enter a history",
        name: "Please enter a name",
        origin: "Please enter a bit about where this breed came from"
    }
});