Эх сурвалжийг харах

通过{{each () }}方式,在事件方法中绑定子数据

huqi 5 жил өмнө
parent
commit
15de87f2d6

+ 16 - 6
o2web/source/o2_core/o2.js

@@ -697,11 +697,11 @@
         }else{
             dom.insertAdjacentHTML(op.position, data);
         }
-        var els = dom.querySelectorAll("[data-o2-element]");
+        var els = dom.querySelectorAll("[data-o2-element],[data-o2-events]");
         for (var i=0; i<els.length; i++){
             var el = els.item(i);
-            var name = el.getAttribute("data-o2-element").toString();
-            if (name) _bindToModule(op.module, el, name);
+            var name = el.getAttribute("data-o2-element");
+            if (name) _bindToModule(op.module, el, name.toString());
             if (el.hasAttribute("data-o2-events")){
                 var events = el.getAttribute("data-o2-events").toString();
                 if (events) _bindToEvents(op.module, el, events);
@@ -721,12 +721,15 @@
     };
 
     var _bindToEvents = function(m, node, events){
+        var p = node.getParent("div[data-o2-$binddatadd]");
+        var data = (p) ? _parseDataCache[p.dataset["o2-$binddataid"]]: null;
+
         var eventList = events.split(/\s*;\s*/);
         eventList.forEach(function(ev){
             var evs = ev.split(/\s*:\s*/);
             if (evs.length>1){
                 node.addEventListener(evs[0], function(e){
-                    if (m[evs[1]]) m[evs[1]].apply(m, [e]);
+                    if (m[evs[1]]) m[evs[1]].apply(m, [e,data]);
                 }, false);
             }
         });
@@ -846,8 +849,15 @@
         return {"codeIndex": v.length-1, "lastIndex": v.length-1};
     }
 
-    var _parseHtml = function(str, json){
+    var _parseDataCache = {};
+    var _parseHtml = function(str, json, i){
         var v = str;
+        if (i){
+            var r = (Math.random()*1000000).toInt().toString();
+            while (_parseDataCache[r]) r = (Math.random()*1000000).toInt().toString();
+            _parseDataCache[r] = json;
+            v = (i) ? "<div data-o2-$binddataid='"+r+"'>"+str+"</div>" : str;
+        }
         var rex = /(\{\{\s*)[\s\S]*?(\s*\}\})/gmi;
 
         var match;
@@ -887,7 +897,7 @@
                 if (eachValue && _typeOf(eachValue)==="array"){
                     for (var i=0; i<eachValue.length; i++){
                         eachValue[i]._ = json;
-                        eachResult += _parseHtml(parseEachStr, eachValue[i]);
+                        eachResult += _parseHtml(parseEachStr, eachValue[i], i);
                     }
                     var eLeft = v.substring(0, match.index);
                     var eRight = v.substring(rex.lastIndex+endEachIndex.lastIndex, v.length);

+ 3 - 4
o2web/source/x_component_Empty/Main.js

@@ -55,7 +55,7 @@ MWF.xApplication.Empty.Main = new Class({
 
 	},
 	loadTask: function(){
-		alert("loadTask")
+		alert("loadTask");
 	},
 	tabover: function(){
 		//alert("tabover");
@@ -65,8 +65,7 @@ MWF.xApplication.Empty.Main = new Class({
 		//alert("tabout")
 		this.myNode.removeClass("mainColor_bg");
 	},
-	clickNode: function(e){
-		debugger;
-		alert(e.sourceTarget);
+	clickNode: function(e, data){
+		alert(data.title);
 	}
 });