You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
51 lines
2.0 KiB
51 lines
2.0 KiB
!(function () { |
|
BI.useInWorker = function () { |
|
function createWatcher (model, keyOrFn, cb, options) { |
|
if (BI.isPlainObject(cb)) { |
|
options = cb; |
|
cb = cb.handler; |
|
} |
|
options = options || {}; |
|
return Fix.watch(model, keyOrFn, cb, BI.extend(options, { |
|
store: model |
|
})); |
|
} |
|
|
|
var models = {}, watches = {}; |
|
addEventListener("message", function (e) { |
|
var data = e.data; |
|
switch (data.eventType) { |
|
case "action": |
|
models[data.name][data.action].apply(models[data.name], data.args); |
|
break; |
|
case "destroy": |
|
BI.each(watches[data.name], function (i, unwatches) { |
|
unwatches = BI.isArray(unwatches) ? unwatches : [unwatches]; |
|
BI.each(unwatches, function (j, unwatch) { |
|
unwatch(); |
|
}); |
|
}); |
|
delete models[data.name]; |
|
delete watches[data.name]; |
|
break; |
|
case "create": |
|
var store = models[data.name] = BI.Models.getModel(data.type, data.options); |
|
watches[data.name] = []; |
|
BI.each(data.watches, function (i, key) { |
|
watches[data.name].push(createWatcher(store.model, key, function (newValue, oldValue) { |
|
postMessage(BI.extend({}, data, { |
|
eventType: "watch", |
|
currentWatchType: key |
|
}, {args: [newValue, oldValue]})); |
|
})); |
|
}); |
|
postMessage(BI.extend({}, data, { |
|
eventType: "create" |
|
}, {msg: store.model})); |
|
break; |
|
default: |
|
break; |
|
} |
|
}, false); |
|
}; |
|
}());
|
|
|