2012-02-25 6 views
2

スクリプトのシャープアクションの名前が変更され、アンダースコアが前に付けられます。コードはブラウザでうまく動作しますが、クライアント側で使用するにはアンダースコアを追加することを忘れてはなりません。これは設計によるのですか?それを変更する方法はありますか?ScriptSharp(Script#)とノックアウト

ここにサンプルがあります: ノックアウトJSのチュートリアルの例「クリックカウンター」を再現しました。

スクリプトシャープビューモデル(C#コード):

public sealed class ClickCounterViewModel 
{ 
    public Observable<int> numberOfClicks; 

    //Dependent Observable is now called computed but is backward compat. 
    public DependentObservable<bool> hasClickedTooManyTimes; 

    //WARNING - this get converted to _registerClick Client Side - not sure why. 
    Action registerClick; 
    Action resetClicks; 

    public ClickCounterViewModel() 
    { 
     numberOfClicks = Knockout.Observable<int>(0); 
     registerClick = delegate() { 
      this.numberOfClicks.SetValue(this.numberOfClicks.GetValue() + 1); 
     }; 

     resetClicks = delegate() { this.numberOfClicks.SetValue(0); }; 

     DependentObservableOptions<bool> options = new DependentObservableOptions<bool>(); 
     options.Model = this; 
     options.GetValueFunction = new Func<bool>(delegate { 
      return this.numberOfClicks.GetValue() >= 3; 
     }); 

     hasClickedTooManyTimes = Knockout.DependentObservable<bool>(options); 
    } 
} 

このコードはアクションがアンダースコアで始まる取得JavaScriptに変換されます。これは期待される行動ですか?

生成されるコード(ジャバスクリプト)が - ただ、問題を説明するために生成されたコメントを表示:

Knockout2Example2.ClickCounterViewModel = function Knockout2Example2_ClickCounterViewModel() { 
/// <field name="numberOfClicks" type="Observable`1"> 
/// </field> 
/// <field name="hasClickedTooManyTimes" type="DependentObservable`1"> 
/// </field> 
/// <field name="_registerClick" type="Function"> 
/// </field> 
/// <field name="_resetClicks" type="Function"> 
/// </field> 
/// This script was generated using Script# v0.7.4.0 

答えて

1

メールで送信!

私は2つのアクションregisterClickとresetClicksをpublicにしませんでした。 公開することで問題が解決され、アンダースコアのないjにレンダリングされます。

1

アンダースコアは、「this is private」を意味する一般的なJavaScriptの規約です。 Scriptsharpは、非公開のメンバ、プロパティ、およびメソッド名をアンダースコアで始まります。外部JavaScriptで便利に参照できるように、あなたの行動を公開してください。

関連する問題