2

我已经使用 Backbone 创建了一些对象,就像我过去在 Java 中所做的那样。

var Lead = Backbone.Model.extend({
    defaults: {
        lng: 0,
        lat: 0,
        distance: 0
    },
    initialize: function () {

    }
});

var Leads = Backbone.Collection.extend({
    model: Lead
});

var Map = Backbone.Model.extend({
    defaults: {
        leads: null
    },
    initialize: function () {
        this.set("leads",new Leads());
    },
    addJson: function (json) {

        var key;

        for (key in json) {
            if (json.hasOwnProperty(key)) {

                var lead = new Lead({ lng: parseFloat(json[key].lng.replace(",", ".")), lat: parseFloat(json[key].lat.replace(",", ".")), distance: json[key].distance });
                this.attributes.leads.add(lead);
            }
        }
    }
});

如您所见,对象 Map 的属性引线在创建时是一个 Collection Leads。但是,这在我被迫使用的 Java 中效果不佳:

this.attributes.leads

调用属性线索的方法之一。

问题:

将对象用作属性是不好的做法,如果是,我该怎么办?

4

1 回答 1

5

你应该能够this.get('leads').add(lead)在你的循环中做;this.get('leads)在这种情况下,将返回(引用)leads具有该add()方法的集合。你做不到,this.leads.add因为this.leads不存在。

Backbonethis.attributes是一种获取模型所有属性的便捷方式,但是它this.set()更适合this.get()作为接口,因为在调用这些事件时会触发这些事件。

于 2013-05-28T14:03:56.767 回答