2013-01-18 8 views
5

でAngularjs仕事を聞かせすることが可能です私のコードは次のとおりです。

class Scope { 
    public var name:String; 
    public function hello() {} 
    public function method1() {} 
    public function method2() {} 
    public function method3() {} 
    public function method4() {} 
    public function method5() {} 
} 

class Ctrl { 
    public function new(scope:Scope) { 
     scope.name = "Freewind"; 
     scope.hello = function() { 
     alert(scope.name); 
     } 
     scope.method1 = function() {} 
     scope.method2 = function() {} 
     scope.method3 = function() {} 
     scope.method4 = function() {} 
     scope.method5 = function() {} 
    } 
} 

typedef Scope = { 
    name:String, 
    hello:Void->Void, 
    method1: Void->Void, 
    method2: Void->Void, 
    method3: Void->Void, 
    method4: Void->Void, 
    method5: Void->Void 
} 

しかし、私はhaXeのクラスのシステムの恩恵を受けたことにしたい、それが好き宣言するために、(コードが簡単かつ明確にすることができます)

次に、Scopeクラスをangularjsの$scopeに関連付ける方法を見つけます。

しかし、haXeのから生成さScopeはプロトタイプを使用している。この場合、

Scope = function(); 
Scope.prototype.name = "something"; 
Scope.prototype.hello = function() {} 
Scope.prototype.method1 = function() {} 
Scope.prototype.method2 = function() {} 
Scope.prototype.method3 = function() {} 
Scope.prototype.method4 = function() {} 
Scope.prototype.method5 = function() {} 

を、私はそれでangularjs仕事をさせるための解決策を見つけることができません。

angularjsをプロトタイプで動作させることができるので、haxeクラスシステム(クラスサポートを持つcoffeescript/typescriptのような他の言語)でも動作できますか?

+0

あなたは、コードの再利用可能なビットをしたい場合は、あなたを移動する、という目的やってはありませんメソッドをサービスに変換します。どのangularJSがMVCコントローラではないかは、MVVMデザインパターンのViewModelです。真のコントローラは指令に含まれています。 – mpm

答えて

2

この質問に対する実際の答えを持っていることのために、1は今、このライブラリは、問題解決することを言及する必要があります:https://github.com/freewind/HaxeAngularSupportは;)

+0

このマクロを2日間使用した後、私はもうこれをお勧めしません。そういう形でコードを書くと、「jsコードが生成するものは何ですか?それは正しいのですか」という考えを止めることはできません。あまりにも疲れました。また、導入された小規模なエラーも発見されましたが、これは修正される可能性がありますが、コーディングのルールがさらに必要になります。 – Freewind

+0

@Freewind:このライブラリを機能させるには、時間をかけてフィールドにテストする必要があります。数日後に諦めてはいけません。ライブラリの若さとマクロの新しさを考えると、それは妥当な形です。それを改良し、最も重要なのはテストを追加する必要があります。そうすれば、正しいことが分かります。これをソフトウェアの堅実なものにすることは達成可能な目標です。あなたの助言に感謝します。 – back2dos

+0

私はそのハプスバグが修正されるのを待っていて、最初のアプローチを試してみましょう。 – Freewind

1

スコープのコンストラクタはクロージャ内で宣言されているため、簡単にアクセスすることはできません。BUT(!)JavaScriptには、既存のオブジェクトからすぐに利用できるコンストラクタがあります。

理論的には、$ rootScopeのコンストラクタを取得してそのプロトタイプを変更すると、後で作成されるスコープを変更する必要があります。ただし、アプリケーションモジュールの.run()または.config()でこれを行うことをお勧めします。

app.run(function($rootScope) { 
    $rootScope.constructor.prototype.foo = 'Set from prototype'; 
}); 

It works and here's the plunker

ただし、おそらくこれを行う必要はありません。私があなたがこれを行う必要があるかもしれないと思う唯一の理由は、たとえそれが孤立したスコープであっても、スコープ上でいくつかの機能やプロパティが利用可能であることを確認する必要があった場合です。私がリンクしているプラ​​ンカーでの指示)。

スコープの継承があり、使用する$ rootScopeがあるため、プロトタイプを使用してScopeを変更する必要がある正当な理由は考えられません。

関連する問題