我在我的Rendr应用程序的控制器中获得了module.exports = {
show: function(params, callback) {
var spec = {
model: {
model: 'Company', params: { name: params.id }
}
};
var options = {},
Authorization = localStorage.getItem('Authorization');
options.header = {
"Authorization": Authorization
}
this.app.fetch(spec, options, function (err, results) {
// return if there is an error fetching the user
if (err) return callback(err);
// set the title of the page to the users name
this.app.set('title', results.model.get('name'));
// render the page with the results from the fetch
callback(null, results);
}.bind(this));
}
};
。我试图从localStorage获取我的授权令牌,并在我获取规范之前将其设置为标题。我也尝试过window.localStorage,但后来我没有定义窗口。我是否无法访问控制器级别的窗口对象?如果没有,我将如何从localStorage获取。
这是我的控制器代码。
const unsigned int BitsPerByte = CHAR_BIT;
unsigned char byte;
for (size_t i = 0; i < data.size(); ++i)
{
if ((i % BitsPerByte) == 0)
{
// first bit of a byte
byte = 0;
}
if (data[i] == '1')
{
// set a bit to 1
byte |= (1 << (i % BitsPerByte));
}
if (((i % BitsPerByte) == BitsPerByte - 1) || i + 1 == data.size())
{
// last bit of the byte
file << byte;
}
}
答案 0 :(得分:1)
欢迎来到Rendr :-)
Rendr是Isomorphic(或#34; Universal),这意味着它的很多代码都在服务器和浏览器中运行。如果您只想在浏览器上运行代码,则有两种方法可以实现:
在视图中有一个名为postRender
的自定义方法 - 该方法不在服务器上运行,只能在浏览器上运行。它是放置所有浏览器特定代码的标准位置。缺点是它在页面呈现后运行。
您可以将代码包装在if (window !== 'undefined') {...}
中,以确保它只在浏览器中运行。缺点是它永远不会在服务器上运行。
在我们的Rendr应用程序中,我们使用localstorage做了一些,有点必须将它楔入基本模板的顶部。它有点奇怪,因为localstorage(浏览器具有持久性)的概念与同构应用程序的概念(服务器和浏览器可以是相同的)相抗衡。所以他们不能很好地合作。