Add support for depthed resolution of data fields
This commit is contained in:
@@ -223,5 +223,7 @@ export var logger = {
|
||||
export function log(level, obj) { logger.log(level, obj); }
|
||||
|
||||
export var createFrame = function(object) {
|
||||
return Utils.extend({}, object);
|
||||
var frame = Utils.extend({}, object);
|
||||
frame._parent = object;
|
||||
return frame;
|
||||
};
|
||||
|
||||
@@ -310,11 +310,7 @@ Compiler.prototype = {
|
||||
|
||||
DATA: function(data) {
|
||||
this.options.data = true;
|
||||
if (data.id.isScoped || data.id.depth) {
|
||||
throw new Exception('Scoped data references are not supported: ' + data.original, data);
|
||||
}
|
||||
|
||||
this.opcode('lookupData');
|
||||
this.opcode('lookupData', data.id.depth);
|
||||
var parts = data.id.parts;
|
||||
for(var i=0, l=parts.length; i<l; i++) {
|
||||
this.opcode('lookup', parts[i]);
|
||||
|
||||
@@ -403,8 +403,12 @@ JavaScriptCompiler.prototype = {
|
||||
// On stack, after: data, ...
|
||||
//
|
||||
// Push the data lookup operator
|
||||
lookupData: function() {
|
||||
this.pushStackLiteral('data');
|
||||
lookupData: function(depth) {
|
||||
if (!depth) {
|
||||
this.pushStackLiteral('data');
|
||||
} else {
|
||||
this.pushStackLiteral('this.data(data, ' + depth + ')');
|
||||
}
|
||||
},
|
||||
|
||||
// [pushStringParam]
|
||||
|
||||
@@ -77,6 +77,12 @@ export function template(templateSpec, env) {
|
||||
}
|
||||
return data;
|
||||
},
|
||||
data: function(data, depth) {
|
||||
while (data && depth--) {
|
||||
data = data._parent;
|
||||
}
|
||||
return data;
|
||||
},
|
||||
merge: function(param, common) {
|
||||
var ret = param || common;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user