function fetchConfig(cb){ return $.getJSON("/getMapConfig",cb); } function init(React){ var MapList = React.createClass({displayName: "MapList", getInitialState:function(){ return { ruleList : [] } }, appendRecord:function(data){ var self = this, newState = self.state.ruleList; if(data && data.keyword && data.local){ newState.push({ keyword : data.keyword, local : data.local }); self.setState({ ruleList: newState }); } }, removeRecord:function(index){ var self = this, newList = self.state.ruleList; newList.splice(index,1); self.setState({ ruleList : newList }); }, render:function(){ var self = this, collection = []; collection = self.state.ruleList.map(function(item,index){ return ( React.createElement("li", null, React.createElement("strong", null, item.keyword), React.createElement("a", {className: "removeBtn", href: "#", onClick: self.removeRecord.bind(self,index)}, "remove"), React.createElement("br", null), React.createElement("span", null, item.local) ) ); }); return ( React.createElement("ul", {className: "mapRuleList"}, collection ) ); }, componentDidMount :function(){ var self = this; fetchConfig(function(data){ self.setState({ ruleList : data }); }); }, componentDidUpdate:function(){ var self = this; //upload config to server var currentList = self.state.ruleList; $.ajax({ method : "POST", url : "/setMapConfig", contentType :"application/json", data : JSON.stringify(currentList), dataType : "json", success :function(res){} }); self.props.onChange && self.props.onChange(self.state.ruleList); } }); return MapList; } module.exports.init = init; module.exports.fetchConfig = fetchConfig;