0

我对骨干网非常陌生,而且遇到了一些麻烦。无法从骨干网收集数据

所以我试图从一个集合中的模型中获取一些数据,我不知道如何,我不确定我是否已经错误地设置了我的集合或某些东西,但这正是我希望你们可以提供帮助的地方。

这里是我的代码:

var currentPage = 1; 

var Page = Backbone.Model.extend({ 
    defaults: { 
     pageName: '', 
     pageID: 0, 
     ajaxUrl: '', 
     pageUrl: '', 
     hashUrl: '', 
     previousPage: '', 
     nextPage: '' 
    } 
}); 

var home = new Page({ 
    pageName: 'Home', 
    pageID: 1, 
    ajaxUrl: 'ajax-content/index.html', 
    pageUrl: 'index.html', 
    hashUrl: '#index', 
    previousPage: 'Contact', 
    nextPage: 'Our Approach' 
}); 

var WebsitePages = Backbone.Collection.extend({ 
    model: Page 
}) 

var myWebsite = new WebsitePages([home]); 

var ContainerView = Backbone.View.extend({ 
    el: "body", 
    events: { 
     'click .previous-page': 'loadPreviousPage', 
     'click .next-page': 'loadNextPage' 
    }, 
    loadPreviousPage: function(e) { 
     e.preventDefault(); 

     var pageModel = myWebsite.where({pageID: currentPage}); 
    }, 
    loadNextPage: function(e) { 
     e.preventDefault(); 

     var pageModel = myWebsite.where({pageID: currentPage}); 
    } 
}); 

到目前为止,这已经让我没有运气。

我也在控制台上做了一些调试,看看我是否可以用其他方式访问它。我的断点放置在loadPreviousPage函数的e.preventDefault()上。这里是我试图做的,结果我得到了:

myWebsite 
s {length: 6, models: Array[6], _byId: Object, constructor: function, model: function…} 

myWebsite.get('home') 
undefined 

myWebsite.get(0) 
undefined 

myWebsite.get('0') 
undefined 

myWebsite.where({pageID: 1}) 
[s] 

var pageModel = myWebsite.where({pageID: 1}) 
undefined 

pageModel 
[s] 

pageModel.get(pageName) 
ReferenceError: pageName is not defined 

pageModel.get('pageName') 
TypeError: undefined is not a function 

我超迷茫现在这样,如果有人可以帮助我,这将是真棒。

干杯。

+0

您的集合已定义良好,但[where](http://backbonejs.org/#Collection-where)返回与属性匹配的模型数组。 – Puigcerber

回答

2

在您的第一个代码块中,currentPage似乎没有在任何地方定义。

在您的控制台输出中,where返回一个数组,您试图将其用作模型。尝试使用

var pageModel = myWebsite.where({pageID: 1})[0]; 

console.log(pageModel.get('pageName')); 
+0

感谢您的回复,我已将它添加到代码中,currentPage变量设置在每个页面的HTML中,这就是为什么我在代码中错过了它。增加'[0]'工作,非常感谢。我明白添加这将使我成为数组的第一部分,但我不明白为什么这是必需的。 – lukehillonline

+0

这是必需的,因为'where'返回一个数组。要访问数组中的模型,只需使用'myArray [0]'访问它:它等同于'var myArray = myWebsite.where({pageID:1})''后跟'var pageModel = myArray [0]' –

+0

辉煌, 谢谢你的帮助。 – lukehillonline