我们正在使用durandal将C#模型转换为Knockout视图模型进行渲染。我想知道是否有一种方法可以设置一个C#模型,其中包含具有set方法的属性,以便在我获得Knockout视图模型时绑定和依赖性已经存在。
我喜欢这种情况发生。
public class MyObject{
public string FirstName{get; set;}
public string LastName {get; set}
private string fullName{get; set;}
public FullName{
get{return fullName;}
set{fullName = FirstName +" "+LastName}
}
我已经使用了Knockout在解释计算的observable时使用的主要示例。我理解如何在纯粹的JS viewmodel中实现这一点。但是,我想设置类似于我上面的C#模型(我不认为这实际上有效),以便找回已经具有它的依赖项的计算机。 / p>
我不完全确定它是可能的,但肯定会很好。
答案 0 :(得分:2)
Max Brodin提到KnockoutMVC这是一个巨大的反模式,你几乎失去了Knockout的所有好处,因为它几乎可以为你所做的一切创建服务器回调。
这些工具会将C#代码编译为Javascript,我只测试了DuoCode,但为它创建一个Knockout绑定非常容易。之后很容易创建像
这样的ViewModelusing Knockout;
namespace ViewModels
{
public class FooViewModel
{
private readonly Observable<string> bar;
private readonly Observable<string> computed;
public FooViewModel()
{
bar = Global.Observable("HelloWorld"); //Translates to ko.observable("HelloWorld") on client
computed = Global.Computed(() => bar.Get() + "COMPUTED");
}
public Observable<string> Bar { get { return bar; } }
public Observable<string> Computed { get { return computed; } }
}
}
我还为ko.mapping创建了
的绑定 Mapping.Map(new { bar = "DataFromserver" }, null, this);
转换为
客户端ko.mapping.fromJS({ bar = "DataFromserver" }, null, this);
答案 1 :(得分:1)
这个想法很好,但它不会在现实世界的项目中发挥作用。您的C#代码需要转换为javascript,它可以适用于像您这样的简单案例。但是如果你将计算属性更改为更复杂的东西,你就会遇到问题。
有knockoutmvc project提供此类功能。他们有hello world样本,看起来像你可以用作开始的东西。您只需要使用属性
标记您的属性public class HelloWorldModel
{
public string FirstName { get; set; }
public string LastName { get; set; }
[Computed]
[ScriptIgnore]
[JsonIgnore]
public string FullName
{
get { return FirstName + " " + LastName; }
}
}
在剃须刀视图中,您应该致电:
@{
var ko = Html.CreateKnockoutContext();
}
@ko.Apply(Model)
答案 2 :(得分:0)
您似乎想要计算属性的自动转换。这是一个小便利的大问题。我想我可以用琐碎的表达式来做,但是你如何将.NET库方法(如string.Format)映射到javascript?您需要一个复制语义的客户端库。大工作,不值得努力。