在初始页面加载时引导数据
以下代码( server.js
和app.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
代码中的某个地方,这也会导致应用程序在将数据加载到集合中时实际执行某些操作。