can
Version:
MIT-licensed, client-side, JavaScript framework that makes building rich web applications easy.
42 lines (30 loc) • 1.13 kB
JavaScript
steal("can/util",
"can/view/stache/expression.js",
"can/view/callbacks",
"can/view/scope", function (can, expression) {
var removeCurly = function(value){
if(value[0] === "{" && value[value.length-1] === "}") {
return value.substr(1, value.length - 2);
}
return value;
};
// registers a callback can-href
can.view.attr("can-href", function(el, attrData){
// foo='bar' zed=5 abc=myValue
// Note: 'tmp ' is added because expressionData "Breaks up the name and arguments of a mustache expression.", but we don't use name:
var attrInfo = expression.parse('tmp(' + removeCurly(el.getAttribute("can-href"))+")", {baseMethodType: "Call"});
var getHash = attrInfo.argExprs[0].value(attrData.scope, null);
// -> {hash: {foo: 'bar', zed: 5, abc: {get: 'myValue'}}}
var routeHref = can.compute(function(){
return can.route.url(getHash());
});
el.setAttribute("href", routeHref());
var handler = function(ev, newVal){
el.setAttribute("href", newVal);
};
routeHref.bind("change", handler );
can.bind.call(el,"removed", function(){
routeHref.unbind("change", handler );
});
});
});