2013-03-11 10 views
5

私はredactor(wysiwygエディタ)の指令を書いています。それはいくつかのハッキングの後に動作しますが、私は正しい方法を見つけることができます。私の主な課題は、ngモデルとredactor jqueryプラグインの間の双方向バインディングです。私はwysiwygエディタからkeyupとcommandイベントを聞いて、モデルを更新します。また、Redactorエディタの外部からモデルの変更を見て、Redactorエディタを適切に更新できるようにします。トリッキーな部分は次のとおりです。(バインディングの前半から)原子炉エディタによって課せられたモデル変更を無視するにはどうすればよいですか?角度指令 - ngモデルで双方向結合を設定する方法

次のコードでは、モデルの新しい値が最後の値と等しい場合は、redactorエディタがモデルに最後に更新した値を記憶し、モデルの変更を無視します。これを達成するための正しい方法であるかどうかは本当に分かりません。これはAngularでの双方向バインディングの一般的な問題であり、rightのようにする必要があります。ありがとう!

<textarea ui-redactor='{minHeight: 500}' ng-model='content'></textarea> 

(CoffeeScriptのために残念)directive.coffee

angular.module("ui.directives").directive "uiRedactor", -> 

    require: "ngModel" 
    link: (scope, elm, attrs, ngModel) -> 
    redactor = null 
    updatedVal = null 

    updateModel = -> 
     ngModel.$setViewValue updatedVal = elm.val() 
     scope.$apply() 

    options = 
     execCommandCallback: updateModel 
     keydownCallback: updateModel 
     keyupCallback: updateModel 

    optionsInAttr = if attrs.uiRedactor then scope.$eval(attrs.uiRedactor) else {} 

    angular.extend options, optionsInAttr 

    setTimeout -> 
     redactor = elm.redactor options 

    #watch external model change 
    scope.$watch attrs.ngModel, (newVal) -> 
     if redactor? and updatedVal isnt newVal 
     redactor.setCode(ngModel.$viewValue or '') 
     updatedVal = newVal 
+3

の代わりに$(時計の

使用

ngModel.$render = -> redactor?.setCode(ngModel.$viewValue or '') 

)、あなたはngModelを実装しようとしています。$(レンダリング)? $ render()は、Angular内の何かがモデルを変更した場合にのみ呼び出されるようです。この[fiddle](http://jsfiddle.net/mrajcok/SKgVS/)では、$ render()はリンクをクリックすると呼び出されます(プログラムによってモデルが変更されます)。 (私はredactorのライセンスを持っていないので、私はこれをテストすることはできません。) –

+0

Mark、それは私のために働いた。どうもありがとうございました! – KailuoWang

+0

すごくうれしくてうれしかったし、私たちに知らせてくれてありがとう。 –

答えて

0

マークRajcokは$(レンダリング。トリックはngModelを使用することです(!ありがとう)溶液が得られた)のではなく$(鑑賞) 。代わりに

scope.$watch attrs.ngModel, (newVal) -> 
    if redactor? and updatedVal isnt newVal 
    redactor.setCode(ngModel.$viewValue or '') 
    updatedVal = newVal 
+0

テンプレートで定義されたng-modelはこのディレクティブを使用して更新されませんか?なぜか分かりますか? –

関連する問題