生成淘汰赛标记在MVC 3
我们目前正在写我们的MVC客户端的新的基础设施,我们正在努力使它所以开发商也不会需要右键多的Javascript(目前的发展池主要是基于桌面的)生成淘汰赛标记在MVC 3
到目前为止,我们对于我们的淘汰赛脚本所做的工作就是创建一个扩展方法,该方法基于使用反射的模型基本生成所有淘汰赛内容。对于没有计算值的简单模型而言,这种方法非常合适,并且工作得非常好。
因此,例如,说我们有这个类
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。
进一步什么帕维尔上面提到的,是表示一个“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>
这是一个很好的回答(有很好的例子),但是我想说一边我不认为'名字:@ ko.Html.TextBox(m => m.FirstName)'less比'First name:'复杂,开发者仍然需要用第一种方法来理解HTML。这更多的是对问题的批评,而不是你的回答。 – Arbiter 2012-07-12 14:18:06
仲裁者 - 很好的想法。正如你所说,最终的游戏是让相对较少经验的开发人员掌握后端功能,而在前端则更少。当然,这里的html是由助手('@ ko.Apply(Model)) )生成的,所以对于一些现存的可能工作,只要这些人遵循编码实践,直到他们精神上100%地掌握下面发生的事情封面。 – 2012-07-12 16:45:14
尝试淘汰赛JS官方例子:http://knockoutjs.com/examples/
淘汰赛JS教程:http://learn.knockoutjs.com/
上述链接会帮助你学习淘汰赛JS。
感谢, -Naren
我想知道,你有没有试着用淘汰赛映射插件??? – Jupaol 2012-07-12 10:20:49
@Jupaol - 我已经尝试过,但它仍然没有提供计算值悲伤..虽然欢呼。 – Steoates 2012-07-12 10:29:27