[英]Bootstrapping data on initial page load
Lynda.com的教程中使用以下代碼( server.js
和app.js
)在Backbone和Node.js Web應用程序中引導數據。 通過對根文件夾app.get('/')
的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
是一種骨干方法,它使集合清空其可能擁有的所有數據,並將傳入的數據加載為自身的數據。 因此,這將根據data
的所有項目創建模型,然后將所有這些模型附加到集合中。
我想你的app.js
代碼中某處也有類似this.listenTo(app.menuItems, 'reset', func...)
或this.on('reset', func...)
,這也會導致數據加載到集合中時,應用程序實際上會執行某些操作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.