forked from fanruan/fineui
Browse Source
Merge in VISUAL/fineui from ~GUY/fineui:master to master * commit '0bf0ef59a33616a3f90b98d855638b94558615e3': webworker webworkermaster
guy
4 years ago
3 changed files with 172 additions and 0 deletions
@ -0,0 +1,27 @@
|
||||
importScripts("./dist/fineui_without_jquery_polyfill.js"); |
||||
BI.initWorker(); |
||||
var Model = BI.inherit(Fix.Model, { |
||||
state: function () { |
||||
return { |
||||
count: 0 |
||||
}; |
||||
}, |
||||
|
||||
computed: { |
||||
name: function () { |
||||
return this.getText(this.model.count); |
||||
} |
||||
}, |
||||
|
||||
actions: { |
||||
addCount: function () { |
||||
this.model.count += 1; |
||||
} |
||||
}, |
||||
|
||||
getText (count) { |
||||
return "被点击了" + count + "次"; |
||||
} |
||||
}); |
||||
|
||||
BI.model("demo.model", Model); |
@ -0,0 +1,89 @@
|
||||
;(function () { |
||||
var contexts = {}; |
||||
|
||||
var worker; |
||||
BI.useWorker = function (wk) { |
||||
worker = wk; |
||||
|
||||
var _init = BI.Widget.prototype._init; |
||||
BI.Widget.prototype._init = function () { |
||||
createWorker.call(this); |
||||
try { |
||||
_init.apply(this, arguments); |
||||
} catch (e) { |
||||
console.error(e); |
||||
} |
||||
}; |
||||
|
||||
var _initRender = BI.Widget.prototype._initRender; |
||||
var postMessage = function (data) { |
||||
switch (data.eventType) { |
||||
case "create": |
||||
this.model = data.msg; |
||||
_initRender.call(this); |
||||
break; |
||||
case "watch": |
||||
var watchArgs = data.args; |
||||
this.watch[data.currentWatchType].apply(this, watchArgs); |
||||
break; |
||||
} |
||||
}; |
||||
BI.Widget.prototype._initRender = function () { |
||||
if (_global.Worker && this._worker) { |
||||
this.__asking = true; |
||||
this.__async = true; |
||||
} else { |
||||
_initRender.apply(this, arguments); |
||||
} |
||||
}; |
||||
|
||||
var unMount = BI.Widget.prototype.__d; |
||||
BI.Widget.prototype.__d = function () { |
||||
delete contexts[this.getName()]; |
||||
try { |
||||
unMount.apply(this, arguments); |
||||
} catch (e) { |
||||
console.error(e); |
||||
} |
||||
}; |
||||
|
||||
worker.addEventListener("message", function (e) { |
||||
var data = e.data; |
||||
postMessage.apply(contexts[data.name], [data]); |
||||
}, false); |
||||
}; |
||||
|
||||
function createWorker () { |
||||
var self = this; |
||||
if (_global.Worker && this._worker) { |
||||
var name = this.getName(); |
||||
contexts[name] = this; |
||||
var modelType = this._worker(); |
||||
worker.postMessage({ |
||||
type: modelType, |
||||
name: name, |
||||
eventType: "create", |
||||
watches: BI.map(this.watch, function (key) { |
||||
return key; |
||||
}) |
||||
}); |
||||
var store = {}; |
||||
this.store = new Proxy(store, { |
||||
get (target, key) { |
||||
return function () { |
||||
worker.postMessage({ |
||||
type: modelType, |
||||
name: name, |
||||
eventType: "action", |
||||
action: key, |
||||
args: [].slice.call(arguments) |
||||
}); |
||||
}; |
||||
}, |
||||
set (target, key, value) { |
||||
return Reflect.set(target, key, value); |
||||
} |
||||
}); |
||||
} |
||||
} |
||||
}()); |
@ -0,0 +1,56 @@
|
||||
<html> |
||||
<head> |
||||
<meta charset="utf-8"> |
||||
<title></title> |
||||
<link rel="stylesheet" type="text/css" href="http://fanruan.design/fineui/2.0/fineui.min.css"/> |
||||
<!-- 下面是不包含normalize.css的css --> |
||||
<!-- <link rel="stylesheet" type="text/css" href="http://fanruan.design/fineui/2.0/fineui_without_normalize.min.css" /> --> |
||||
<script src="./dist/fineui.js"></script> |
||||
<script src="./dist/fix/worker.compact.js"></script> |
||||
</head> |
||||
<body> |
||||
<div id="wrapper"></div> |
||||
<script> |
||||
var worker = new Worker("./demo.worker.js"); |
||||
|
||||
BI.useWorker(worker); |
||||
|
||||
var Widget = BI.inherit(BI.Widget, { |
||||
_worker: function () { |
||||
return "demo.model"; |
||||
}, |
||||
watch: { |
||||
name: function (val) { |
||||
this.button.setText(val); |
||||
} |
||||
}, |
||||
render: function () { |
||||
var self = this; |
||||
console.log(this.model); |
||||
return { |
||||
type: "bi.button", |
||||
ref: function (_ref) { |
||||
self.button = _ref; |
||||
}, |
||||
text: this.model.name, |
||||
handler: function () { |
||||
self.store.addCount(); |
||||
} |
||||
}; |
||||
} |
||||
}); |
||||
BI.shortcut("demo.worker", Widget); |
||||
BI.createWidget({ |
||||
type: "bi.absolute", |
||||
items: [{ |
||||
el: { |
||||
type: "demo.worker" |
||||
}, |
||||
top: 100, |
||||
left: 100 |
||||
}], |
||||
element: "#wrapper" |
||||
}); |
||||
</script> |
||||
</body> |
||||
</html> |
Loading…
Reference in new issue