我们的React Native Redux应用程序使用JWT令牌进行身份验证.有许多动作需要这样的令牌,并且很多动作同时被派遣,例如当app加载时.
例如
componentDidMount() {
dispath(loadProfile());
dispatch(loadAssets());
...
}
Run Code Online (Sandbox Code Playgroud)
双方loadProfile并loadAssets要求JWT.我们将令牌保存在状态和AsyncStorage.我的问题是如何处理令牌过期.
最初我打算使用中间件来处理令牌过期
// jwt-middleware.js
export function refreshJWTToken({ dispatch, getState }) {
return (next) => (action) => {
if (isExpired(getState().auth.token)) {
return dispatch(refreshToken())
.then(() => next(action))
.catch(e => console.log('error refreshing token', e));
}
return next(action);
};
Run Code Online (Sandbox Code Playgroud)
}
我遇到的问题是令牌loadProfile和loadAssets动作都会刷新令牌,因为在派遣令牌时,令牌将过期.理想情况下,我想"暂停"需要身份验证的操作,直到刷新令牌.有没有办法用中间件做到这一点?
我通过AJAX从外部文件成功加载了一些svg:
$("#svg").load(svgUrl + " svg", function() {
// do stuff
});
Run Code Online (Sandbox Code Playgroud)
我的HTML看起来像这样:
<div id="svg" ...>
<svg ...>
...
</svg>
</div>
Run Code Online (Sandbox Code Playgroud)
我可以看到图形很好.现在我想在加载的svg中添加一些额外的svg元素.我将脚本更改为:
$("#svg").load(svgUrl + " svg", function() {
$("svg").append("<g id='compass'></g>");
// do stuff
});
Run Code Online (Sandbox Code Playgroud)
由于某些原因,添加的元素在firebug中显示为隐藏,无论我放入哪个xml,我都无法在我的网页上看到它.
更新:
感谢echo-flow我能够附加到我的SVG.现在,如果我尝试从另一个xml文件加载我的指南针svg,它就不会出现在我的DOM中.目前我的代码如下:
$("#svg").load(obj.svgUrl + " svg", function() {
var svgns = "http://www.w3.org/2000/svg";
var g = document.createElementNS(svgns,"g");
g.setAttributeNS(null,'id','compass');
$("svg").append(g);
$("#compass").load("files/svg/compass.xml");
});
Run Code Online (Sandbox Code Playgroud)
如果我在firebug中查看控制台,我看到指南针标记的AJAX请求结果是成功但是为空.
处理可选React.PropType.func属性的最佳方法是什么?
我应该为它提供默认的noop(如果是这样,最好的方法是什么)或者我应该检查是否定义了道具?
propTypes: {
onClick: React.PropTypes.func
},
someMethod: function() {
if (this.props.onClick) {
this.props.onClick();
}
}
Run Code Online (Sandbox Code Playgroud) 到目前为止,我一直在我的Rails/Backbone.js应用程序中使用EJS模板.我真的想开始使用backbone.marionette.我该怎么做才能使它与EJS一起使用?
MyView = Backbone.Marionette.ItemView.extend({
template: "#some-template"
});
Run Code Online (Sandbox Code Playgroud)
它在文档中说我需要为template属性提供jQuery选择器,但我不认为我的EJS模板有一个.
更新:
这就是我如何使用模板正常渲染我的视图:
TasksTree.Views.TaskItem = Backbone.View.extend({
...
render: function() {
...
this.$el.html(JST['tasks_tree/item'](options));
return this;
}
})
Run Code Online (Sandbox Code Playgroud)
我有模板文件夹,item.jst.ejs文件看起来像这样:
<li>
<label><%= taskTitle %></label>
</li>
Run Code Online (Sandbox Code Playgroud)
我的模板文件夹包含在中 application.js
我有一个PHP脚本,它读取XML文件并使用SimpleXML修改它.完成所有修改后,脚本保存文件(大小~2.8 mb).
我需要使用jQuery加载这个XML文件,这需要相当长的时间.有没有办法压缩/缩小我的XML文件,以减少我的AJAX调用中的加载时间.
更新:
XML文件包含网页的SVG(大代谢图),因此它必须保留XML节点的所有内容.
我创建了一个jQuery UI手风琴,其标题中包含一些额外的超链接.现在当我点击标题中的一个超链接时,手风琴打开了.我怎么能防止这种情况?我只希望手风琴在用户点击标题中的任何空格时打开,除了我添加的超链接.
reactjs ×2
append ×1
backbone.js ×1
dom ×1
ejs ×1
filesize ×1
javascript ×1
jquery ×1
jquery-ui ×1
jwt ×1
load ×1
marionette ×1
minify ×1
performance ×1
php ×1
react-native ×1
redux ×1
svg ×1
templates ×1
xml ×1