对于想了解JavaScript–React/Flux方法来处理具有登录流的权限敏感操作的读者,本文将提供新的信息,我们将详细介绍react登录权限控制,并且为您提供关于Flash(ActionScri
对于想了解JavaScript – React / Flux方法来处理具有登录流的权限敏感操作的读者,本文将提供新的信息,我们将详细介绍react登录权限控制,并且为您提供关于Flash(ActionScript,AS) & JavaScript通信浅谈、javascript forEach通用循环遍历方法_javascript技巧、javascript – Flux和React JS中的相关操作、javascript – React / Redux:登录后重定向的有价值信息。
本文目录一览:- JavaScript – React / Flux方法来处理具有登录流的权限敏感操作(react登录权限控制)
- Flash(ActionScript,AS) & JavaScript通信浅谈
- javascript forEach通用循环遍历方法_javascript技巧
- javascript – Flux和React JS中的相关操作
- javascript – React / Redux:登录后重定向
JavaScript – React / Flux方法来处理具有登录流的权限敏感操作(react登录权限控制)
总体问题:
当一个未登录的访问者尝试一个需要他/她登录的动作时,Flux的方法是(a)检查用户是否登录,(b)启动登录流程,(c)完成成功的行动
举一个论坛应用程序的例子,要求用户登录后发布:
我们有一个注释表单组件(大部分来自FB的React tut):
var CommentForm = React.createClass({ handleSubmit: function ( e ) { e.preventDefault(); // get data commentData = { content: this.refs.content.getDOMNode().value.trim() }; this.props.onCommentSubmit( commentData ); this.resetForm(); },resetForm: function () { this.refs.content.getDOMNode().value = ''; },render: function () { return ( <form className="comment-form" id="comment-form" onSubmit={ this.handleSubmit }> <textarea name="comment[content]" placeholder="What's on your mind?" ref="content"></textarea> <button className="post-comment button" type="submit">Post</button> </form> ) } });
评论店(缩写)
var CHANGE_EVENT = 'change'; var _comments = {}; function createComment ( data ) { // post to server } var CommentStore = React.addons.update(EventEmitter.prototype,{$merge: { // omitted methods dispatcherIndex: Appdispatcher.register(function(payload) { var action = payload.action; var text; switch(action.actionType) { case CommentConstants.ADD_COMMENT: Appdispatcher.waitFor([SessionStore.dispatchToken]) createComment(action.data); break; } return true; }) }});
和一个处理会议的商店(也简称):
var CHANGE_EVENT = 'change'; function ensureCurrentUser () { if ( !SessionStore.currentUser() ) { app.router.navigate('/login'); } } var SessionStore = React.addons.update(EventEmitter.prototype,{$merge: { // omitted code currentUser: function () { return app.context.current_user; },dispatchToken: Appdispatcher.register(function ( payload ) { var action = payload.action; switch(action.actionType) { case CommentConstants.ADD_COMMENT: ensureCurrentUser(); break; } return true; }) }});
我最初的想法是,这是Flux的waitFor()方法的一个例子.然而,上面的实现失败,因为wait只要设置了SessionStore.dispatchToken(只要ensureCurrentUser返回)就关闭依赖循环.
这样的情况下,有效载荷应该传递到ensureCurrentUser,然后进入/ login的路由处理程序?流量处理这些流量的方法是什么?
提前致谢 :)
解决方法
case CommentConstants.ADD_COMMENT: if (SessionStore.getUser()) { createComment(action.data); } break;
但是要保留注释,以便在用户登录后创建注释,我将在CommentStore中创建一个未决注释的集合,然后在回调登录验证和会话创建过程中,发出新的操作以通知用户现在已经登录的CommentStore.然后,CommentStore可以通过在挂起的时候创建真实的注释来做出回应.
Flash(ActionScript,AS) & JavaScript通信浅谈
摘要:本文主要阐述两个问题:①如何进行Flash编程;②Flash(.swf)如何与JavaScript通信?这里牵涉到一门语言——ActionScript。关于它,百科上是这么说的,ActionScript(简称AS)是由Macromedia(现已被Adobe收购)为其Flash产品开发的 ,最初是一种简单的脚本语言,现在最新版本ActionScript3.0,是一种完全的面向对象的编程语言,功能强大,类库丰富,语法类似JavaScript,多用于Flash互动性、娱乐性、实用性开发,网页制作和RIA(丰富互联网程序)开发。
目录:
-------------------------------------------
- 工欲善其事必先利其器
- ActionScript与JavaScript函数绑定
- ExternalInterface.addCallback(Js调用As)
- ExternalInterface.call(As调用Js)
1.工欲善其事必先利其器
ActionScript或者说是Flash是使用什么编程工具呢?也可以直观的说.swf文件,是如何生成的?需要明白两点:①平时用户安装的“Adobe Flash Player for IE”,其实是一个播放网页Flash的插件。按道理来说Flash应该也是遵循NPAPI协议开发的(早期插件开发协议,先已经逐渐被PPAPI替代)。②Flash CSX系列开发工具,Flash Builder等等,这些很大,功能很强,可以进行全面的Flash动画开发。
但是,本文只牵涉到网络通信方面的,不涉及任何动画开发内容。推荐一款轻量级工具:FlashDevelop+Flex SDK,这是一款很好的swf开发工具。
环境配置十分之简单,①从网上搜索FlashDevelop下载、安装 ---> ②从AppMan中选择Flex SDK(OLD)安装(如下图)。整个过程个人感觉和AndroidStudio差不多,这里需要注意的是,默认路径是../AppData/Local/FlashDevelop/Apps,可以自行在菜单栏Tools中进行修改,一般直接使用即可,不要进行修改。
OK,让我们新建一个AS3.0项目,开始Flash开发之旅。
2.ActionScript与JavaScript函数绑定
Flash与JavaScript如何通信?这是本文的核心。涉及到一个绑定机制,先放个烟雾弹... 看完以下两个函数再继续拆除烟雾弹。
(注意,以下这两个方法都是写在.as中,非js)
//①
ExternalInterface.addCallback("send",send);
//②
ExternalInterface.call("onMessage",e.data);
你很聪明,可能根本不需要再看下文了,已经明白了其中的奥妙。
2.1 ExternalInterface.addCallback(Js调用As)
ExternalInterface.addCallback:有两个参数,第一个参数“send”——指定的是JavaScript函数名;第二个参数send——指定的是AS中的函数名(AS中必须有该函数的实现体,如下)。
///发送数据
public function send(sendMsg:String = null):void{
if (g_tcp_xml_socket.connected){
g_tcp_xml_socket.send(sendMsg);
}
}
如此一来,在JavaScript中就可以来一波这样的操作了...
var swf = swfobject.getobjectById(''XXXFlash'');//swf的名称
///发送消息
function send(data){
try{
swf.send(data);
}
catch(exception){
alert(''send socket error.'');
}
}
回顾一下,也算是对上文的总结:首先JavaScript加载swf文件(获得swf对象);接着JavaScript通过swf对象,再调用send方法;而"send"方法在AS中已经被绑定到send方法上了,这样就会执行AS中的send方法。至此,一套完整的JavaScript调用ActionScript方法的流程就跑通了。
2.2 ExternalInterface.call(As调用Js)
来而不往非礼也,ActionScript如何调用JavaScript呢?也是一个绑定过程 ExternalInterface.call("onMessage",e.data); 这里的onMessage是一个JavaScript中的函数名,
///消息体
function onMessage(data){
}
仅一条语句,就实现了As调用Js方法。同时,也可以注意到,ExternalInterface.call 方式还完美的实现了,参数的传递。
文中尚未对swf到底如何加载进行阐明?后续的文章中将对其说明............
@qingdujun
2017-8-23 于湖南邵阳
javascript forEach通用循环遍历方法_javascript技巧
var forEach = (function(){
//数组与伪数组的遍历
var _Array_forEach = function (array, block, context) {
if (array == null) return;
//对String进行特殊处理
if(typeof array == ''string''){
array = array.split('''');
}
var i = 0,length = array.length;
for (;i };
//对象的遍历
var _Function_forEach = function (object, block, context) {
for (var key in object) {
//只遍历本地属性
if (object.hasOwnProperty(key)&&block.call(context, object[key], key, object)===false){
break;
}
}
};
return function(object, block, context){
if (object == null) return;
if (typeof object.length == "number") {
_Array_forEach(object, block, context);
}else{
_Function_forEach(object, block, context);
}
};
})()
函数本身并不复杂,但很精巧。加了一些简单的注释,想信大家能看懂。
来看一点例子
//1:1 \n 2:2
forEach([1,2,3,4,5],function(el,index){
if(index>2){
return false;
}
alert(index+":"+el);
});
function print(el,index){
alert(index+":"+el);
}
//a:a \n b:b \n c:c
forEach({a:''a'',b:''b'',c:''c''},print);
//1:笨 \n 2:蛋 \n 3:的 \n 4:座 \n 5:右 \n 6:铭
forEach("笨蛋的座右铭",print);
function Person(name, age) {
this.name = name || "";
this.age = age || 0;
};
Person.prototype = new Person;
var fred = new Person("jxl", 22);
fred.language = "chinese";//极晚绑定
//name:jxl \n age:22 \n language:chinese
forEach(fred,print);