From af285dd370aa1b6779bf67ac3bdc19da512aaac5 Mon Sep 17 00:00:00 2001 From: Misko Hevery Date: Tue, 19 Apr 2011 16:34:49 -0700 Subject: Added ng:options directive Closes #301 --- src/widgets.js | 288 ++++++++++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 233 insertions(+), 55 deletions(-) (limited to 'src/widgets.js') diff --git a/src/widgets.js b/src/widgets.js index 4245f99c..a9d42bdf 100644 --- a/src/widgets.js +++ b/src/widgets.js @@ -166,18 +166,19 @@ function modelAccessor(scope, element) { var expr = element.attr('name'); - var assign; + var exprFn, assignFn; if (expr) { - assign = parser(expr).assignable().assign; - if (!assign) throw new Error("Expression '" + expr + "' is not assignable."); + exprFn = parser(expr).assignable(); + assignFn = exprFn.assign; + if (!assignFn) throw new Error("Expression '" + expr + "' is not assignable."); return { get: function() { - return scope.$eval(expr); + return exprFn(scope); }, set: function(value) { if (value !== undefined) { return scope.$tryEval(function(){ - assign(scope, value); + assignFn(scope, value); }, element); } } @@ -561,64 +562,241 @@ function inputWidgetSelector(element){ angularWidget('input', inputWidgetSelector); angularWidget('textarea', inputWidgetSelector); angularWidget('button', inputWidgetSelector); -angularWidget('select', function(element){ - this.descend(true); - return inputWidgetSelector.call(this, element); -}); +/** + * @workInProgress + * @ngdoc directive + * @name angular.directive.ng:options + * + * @description + * Dynamically generate a list of `