change scope.knob to var knob.

scope.knob = scope.$eval(attrs.knobData); 
to
var knob = scope.$eval(attrs.knobData);

If you name the data variable $scope.knob in the main scope than the directive will overwrite it and $watch will not function. 
An internal variable is better