|
1 | 1 | /*!
|
2 |
| - * mvvm.js v1.4.0 (c) 2017 TANG |
| 2 | + * mvvm.js v1.4.1 (c) 2017 TANG |
3 | 3 | * Released under the MIT license
|
4 |
| - * Sat Oct 14 2017 08:39:43 GMT+0800 (CST) |
| 4 | + * Sat Nov 04 2017 11:30:28 GMT+0800 (CST) |
5 | 5 | */
|
6 | 6 | (function (global, factory) {
|
7 | 7 | typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
|
|
1258 | 1258 | var regQuotes = /(^'*)|('*$)|(^"*)|("*$)/g
|
1259 | 1259 | var regJsonFormat = /[^,]+:[^:]+((?=,[^:]+:)|$)/g
|
1260 | 1260 |
|
| 1261 | + /** |
| 1262 | + * 生成匿名事件函数 |
| 1263 | + * @param {String} expression |
| 1264 | + * @return {Function} |
| 1265 | + */ |
| 1266 | + function createAnonymous (expression) { |
| 1267 | + try { |
| 1268 | + return new Function('scope', addScope(expression)) |
| 1269 | + } catch (e) { |
| 1270 | + error('Invalid generated expression: [' + expression + ']') |
| 1271 | + return noop |
| 1272 | + } |
| 1273 | + } |
| 1274 | + |
1261 | 1275 | /**
|
1262 | 1276 | * 分解字符串函数参数
|
1263 | 1277 | * @param {String} funcString
|
|
1326 | 1340 | var info = stringToParams(expression)
|
1327 | 1341 | var func = info.func, args = info.args
|
1328 | 1342 |
|
| 1343 | + // 尝试匿名函数表达式 |
| 1344 | + if (!isNormal(func)) { |
| 1345 | + func = createAnonymous(expression) |
| 1346 | + } |
| 1347 | + |
1329 | 1348 | return { type: type, dress: dress, func: func, args: args }
|
1330 | 1349 | }
|
1331 | 1350 |
|
|
1340 | 1359 | var expression = desc.expression
|
1341 | 1360 |
|
1342 | 1361 | if (args) {
|
1343 |
| - binds.push(formatEvent(args, expression)) |
| 1362 | + binds = [formatEvent(args, expression)] |
1344 | 1363 | } else {
|
1345 | 1364 | var json = convertJson(expression)
|
1346 | 1365 | each(json, function (value, key) {
|
|
1432 | 1451 | var dress = bind.dress
|
1433 | 1452 | var capture = dress.indexOf('capture') > -1
|
1434 | 1453 |
|
| 1454 | + if (isFunc(func)) { |
| 1455 | + return this.bindAnonymousEvent(type, dress, func) |
| 1456 | + } |
| 1457 | + |
1435 | 1458 | if (func === '$remove') {
|
1436 | 1459 | return this.bindRemoveEvent(type, dress)
|
1437 | 1460 | }
|
|
1459 | 1482 | }
|
1460 | 1483 |
|
1461 | 1484 | /**
|
1462 |
| - * 隐性绑定删除($remove) vfor 选项事件 |
| 1485 | + * 绑定匿名事件 |
| 1486 | + * @param {String} type [事件类型] |
| 1487 | + * @param {String} dress [事件修饰符] |
| 1488 | + * @param {Function} func [匿名事件函数] |
| 1489 | + */ |
| 1490 | + von.bindAnonymousEvent = function (type, dress, func) { |
| 1491 | + var scope = this.scope || this.vm.$data |
| 1492 | + this.bindEvent(type, dress, func.bind(scope, scope)) |
| 1493 | + } |
| 1494 | + |
| 1495 | + /** |
| 1496 | + * 匿名绑定删除($remove) vfor 选项事件 |
1463 | 1497 | * @param {String} type [事件类型]
|
1464 | 1498 | * @param {String} dress [事件修饰符]
|
1465 | 1499 | */
|
|
0 commit comments