从骨干js中的集合中获取ID模型

时间:2017-06-25 16:43:12

标签: javascript backbone.js

我正在试图弄清楚如何通过它的id获取模型并显示相同的视图。我已经设置了我的路由器来获取id的数据。我尝试了很多,但无法找到解决方案。对此有任何想法将不胜感激。

collection.js文件:

app.Routers.socialRouter = Backbone.Router.extend({
        routes: {
            "" : "homePage",
            "make_friends/:id" : "userProfile",
        },

        userProfile: function() {
            new app.Views.idView({ model: userCollections.get(id) });
        }

    });

    new app.Routers.socialRouter();

    Backbone.history.start();

router.js文件:

app.Views.idView = Backbone.View.extend({
    el: $("#app"),

    template: _.template($('#public-profile').html()),

    initialize: function(){
        this.render();
    },

    render: function () {
        console.log(this.model); /// undefined
        this.$el.html(this.template( this.model.toJSON() )); 
        return this;
    }
    });

view.js文件:

[
        {
            "id": "1",
            "firstname": "Abc",
            "lastname": "Xyz"
        },
        {
            "id": "2",
            "firstname": "Klm",
            "lastname": "Opq"
        }
    ]

来自网址的JSON数据: use std::iter; fn main() { let val = 5u64; let mut iter = iter::repeat(&val); let res = iter.next(); }

预期的路由器链接:http://localhost/socialapp/#/make_friends/2

2 个答案:

答案 0 :(得分:0)

要回答您的问题,您会在回调中收到路由参数的值。您可以将其传递给视图并在其初始化

中访问它
app.Routers.socialRouter = Backbone.Router.extend({
    routes: {
        "" : "homePage",
        "make_friends/:id" : "userProfile",
    },

    userProfile: function(id) {
        // no reference?
        new app.Views.idView({ collection: userCollections, modelId: id });
    }

});

如果您的查看实际上是项目视图,则无需传递整个集合,您只需在路由器中获取集合后执行以下操作。

new app.Views.idView({ model: userCollections.get(id) });

更好的是,您的视图不需要集合,您只需要一个带有返回模型信息的终点的模型实例

答案 1 :(得分:0)

userCollections.get(id)应该有效。

考虑到Id是模型的属性,您也可以在下面找到模型。

userCollections.find(function(model){return model.get('id')=== Id;});