私は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
の代わりに$(時計の
使用
)、あなたはngModelを実装しようとしています。$(レンダリング)? $ render()は、Angular内の何かがモデルを変更した場合にのみ呼び出されるようです。この[fiddle](http://jsfiddle.net/mrajcok/SKgVS/)では、$ render()はリンクをクリックすると呼び出されます(プログラムによってモデルが変更されます)。 (私はredactorのライセンスを持っていないので、私はこれをテストすることはできません。) –
Mark、それは私のために働いた。どうもありがとうございました! – KailuoWang
すごくうれしくてうれしかったし、私たちに知らせてくれてありがとう。 –