在初始页面加载时引导数据

以下代码( server.jsapp.js )在Lynda.com的教程中用于引导Backbone和Node.js Web应用程序中的数据。 通过获取对根文件夹app.get('/')请求,您可以看到它正在从json文件中导出的项目上调用JSON.stringify (所以它不使用数据库作为示例)。 前端文件app.js似乎对节点提供的data项调用app.menuItems.reset({{{ data }}})

我有一个关于这个问题没有解释的教程

1)如果节点正在提供初始get请求的data ,为什么还需要调用app.menuItems.reset({{{ data }}})get请求是否不需要将数据提供给前端?

请让我知道,如果你需要看到更多的代码。 我认为这个问题可以通过关于引导的一般知识来回答,而不需要看到例如app.menuItems。

server.js

 items = require('./data/menu-items'); //static json file var app = express() .use(express.bodyParser()) .use(express.static('public')); app.get('/', function (req, res) { res.render('index.hbs', {data: JSON.stringify(items)}); }); 

app.js

 <script type="text/javascript" src="js/app.js"></script> <script type="text/javascript"> app.menuItems.reset({{{data}}}); </script> 

调用GET /到服务器确实会返回浏览器处理请求所需的所有信息,但骨干集合不知道数据在页面中,直到您调用数据reset为止。

尝试这个:

更改app.js(我认为它实际上是您的hbs文件?)来读取:

 <script type="text/javascript" src="js/app.js"></script> <script type="text/javascript"> var myData = {{{data}}}; </script> 

你会看到没有任何反应。

这是因为您的应用程序的骨干部分( app.js )仅在客户端上运行。 那么app.menutItems.reset()调用的目的是告诉浏览器,当app.js被加载(以便app.menuItems可用)时,使用来自服务器的数据reset集合。

reset是一个主干方法,它使集合清空它可能拥有的任何数据,并将传入的数据作为自己的数据加载。 因此,这将创builddata中所有项目的模型,然后将所有这些模型附加到集合中。

我猜这里有一些像this.listenTo(app.menuItems, 'reset', func...)this.on('reset', func...)在你的app.js代码中的某个地方,这也会导致应用程序在将数据加载到集合中时实际执行某些操作。