2

現在、MVCクライアント用の新しいインフラストラクチャを作成しており、開発者が多くのJavascriptを修正する必要がないように作成しようとしています(現在の開発プールは主にデスクトップベースです)

ノックアウトスクリプトに対してこれまでに行ったことは、リフレクションを使用してモデルに基づいて基本的にすべてのノックアウトのものを生成する拡張メソッドを作成することです。これは、計算値のない単純なモデルで完全に機能し、これまでのところ非常にうまく機能します。

たとえば、このクラスがあったとしましょう

public class AppViewModel
  {
     public string FirstName {get; set;}
     public string LastName {get; set;}
  }

以下が生成され、ビューに追加されます

  function AppViewModel() {
    this.firstName = ko.observable('Bob');
    this.lastName = ko.observable('Smith');
   }

私が本当にやりたいのは、モデルから計算された値をサポートすることです。しかし、私はそれを行う方法を理解することができません。

それで

    public FullName()
{
return this.FirstName + " " + this.LastNAme
}

次のようなものを生成します

 this.fullName = ko.computed(function() {
        return this.firstName() + " " + this.lastName();
    }, this);

明確にするために、私がやろうとしているのは、モデルに基づいて計算値を生成することです。

助けてくれてありがとう

乾杯。ste。

4

4 に答える 4

4

多分それはhttp://knockoutmvc.com/を助けるでしょう

于 2012-07-12T10:22:33.800 に答える
4

Pavelが上で述べたことに加えて、シナリオを「T」に示す素晴らしい例があります。

http://knockoutmvc.com/HelloWorld

このページからの文字起こしは次のとおりです。

モデル:

public class HelloWorldModel
{
  public string FirstName { get; set; }
  public string LastName { get; set; }

  public Expression<Func<string>> FullName()
  {
    return () => FirstName + " " + LastName;
  }
}

かみそり:

@using PerpetuumSoft.Knockout
@model KnockoutMvcDemo.Models.HelloWorldModel           
@{
  var ko = Html.CreateKnockoutContext();
}
<p>First name: @ko.Html.TextBox(m => m.FirstName)</p>
<p>Last name: @ko.Html.TextBox(m => m.LastName)</p>
<h2>Hello, @ko.Html.Span(m => m.FullName())!</h2>

@ko.Apply(Model)

コントローラ:

public class HelloWorldController : BaseController
{
  public ActionResult Index()
  {
    InitializeViewBag("Hello world");
    return View(new HelloWorldModel
    {
      FirstName = "Steve",
      LastName = "Sanderson"
    });
  }
}

自動生成されたHTML:

<p>
    First name:
    <input data-bind="value : FirstName" /></p>
<p>
    Last name:
    <input data-bind="value : LastName" /></p>
<h2>
    Hello, <span data-bind="text : FullName"></span>!</h2>

<script type="text/javascript">
    var viewModelJs = { "FirstName": "Steve", "LastName": "Sanderson" };
    var viewModel = ko.mapping.fromJS(viewModelJs);
    viewModel.FullName = ko.computed(function () {
        try {
            return this.FirstName() + ' ' + this.LastName();
        } 
        catch (e) { return null; };
    }, viewModel);
    ko.applyBindings(viewModel);
</script>
于 2012-07-12T11:46:19.613 に答える
0

Script#を見てください

http://projects.nikhilk.net/ScriptSharp/

于 2012-07-12T11:51:29.163 に答える
0

ノックアウトJSの公式例を試してください:http://knockoutjs.com/examples/

Knockout JSチュートリアル: http: //learn.knockoutjs.com/

上記のリンクは、ノックアウトJSの学習に役立ちます。

ありがとう、-ナレン

于 2012-07-13T10:28:26.767 に答える