Backbone.js 击退js使用RESTful Web服务(如ServiceStack)的最简单示例是什么?
我正在寻找一个非常简单的示例,该示例显示如何将击退代码连接到通过RESTful服务连接的主干模型。我正在使用ServiceStack | c#后端。下面的所有链接都太复杂了,都使用localStore,而不是通过url使用RESTful服务。我还更喜欢看到Javascript中的示例,而不是CoffeeScript 我的示例url类似于localhost/entities,点击此按钮将导致RESTful Web服务返回所有实体。用localhost/entity/1点击它将返回Id为1的实体 _http://kmalakoff.github.com/knockback/index.html _https://github.com/kmalakoff/knockback-reference-app/ _https://github.com/addyosmani/todomvc 以下是第一个链接上的击退教程示例:Backbone.js 击退js使用RESTful Web服务(如ServiceStack)的最简单示例是什么?,backbone.js,knockout.js,
servicestack,knockback.js,Backbone.js,Knockout.js,
servicestack,Knockback.js,我正在寻找一个非常简单的示例,该示例显示如何将击退代码连接到通过RESTful服务连接的主干模型。我正在使用ServiceStack | c#后端。下面的所有链接都太复杂了,都使用localStore,而不是通过url使用RESTful服务。我还更喜欢看到Javascript中的示例,而不是CoffeeScript 我的示例url类似于localhost/entities,点击此按钮将导致RESTful Web服务返回所有实体。用localhost/entity/1点击它将返回Id为1的实体 _
Models, Collection, ViewModel, and Bindings:
// Generated by CoffeeScript 1.3.3
var model, view_model;
model = new Backbone.Model({
first_name: "Planet",
last_name: "Earth"
});
view_model = kb.viewModel(model);
view_model.full_name = ko.computed((function() {
return "" + (this.first_name()) + " " + (this.last_name());
}), view_model);
ko.applyBindings(view_model, $('#kb_view_model_computed')[0]);
但是没有提到如何将主干模型连接到RESTful Web服务
有一些例子说明了如何通过主干实现这一点,但我不确定在使用Knockback时情况会发生什么变化
找到了以下链接,但没有帮助:
_http://stackoverflow.com/questions/7992431/using-knockoutjs-backbone-together
_http://stackoverflow.com/questions/9704220/is-knockback-js-production-ready
_http://stackoverflow.com/questions/10434203/defining-models-on-server-side-when-using-mvvm-with-knockout-js
提前感谢您提供的任何帮助。顺便说一句,你不想要超链接,你会得到下划线…;) 在凯文·马拉科夫(Kevin Malakoff)的大力帮助和支持下,这个伟大的项目让我得以让一个小例子发挥作用!我用这个项目作为起点 c#文件:Global.asax.cs
我举了一个非常简单的例子。它假设您已经知道如何使用主干和淘汰,所以这只是一个如何将它们结合使用的快速示例 您可以使用
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.SessionState;
using ServiceStack.Redis;
using ServiceStack.ServiceInterface;
using ServiceStack.WebHost.Endpoints;
namespace MyApp
{
public class Person
{
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
}
public class PersonService : RestServiceBase<Person>
{
public static Person kevin = new Person { Id = 1, FirstName = "Kevin", LastName = "Malakoff" };
public static Person scott = new Person { Id = 2, FirstName = "Scott", LastName = "Idler" };
public static List<Person> people = new List<Person> { kevin, scott };
public override object OnGet(Person person)
{
if (person.Id != default(int))
return people[person.Id-1];
return people;
}
public override object OnPost(Person person)
{
return base.OnPost(person);
}
public override object OnPut(Person person)
{
return OnPost(person);
}
public override object OnDelete(Person person)
{
return base.OnDelete(person);
}
}
public class AppHost : AppHostBase
{
public AppHost() : base("MyApp", typeof(PersonService).Assembly) { }
public override void Configure(Funq.Container container)
{
ServiceStack.Text.JsConfig.EmitCamelCaseNames = true;
Routes
.Add<Person>("/persons")
.Add<Person>("/persons/{Id}");
}
}
public class WebApiApplication : System.Web.HttpApplication
{
protected void Application_Start(object sender, EventArgs e)
{
new AppHost().Init();
}
}
}
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>MyApp2</title>
<script>window.JSON || document.write('<script src="http://ajax.cdnjs.com/ajax/libs/json2/20110223/json2.js">\x3C/script>')</script>
<script src="Scripts/jquery-1.8.0.js" type="text/javascript" ></script>
<script src="Scripts/knockback-full-stack-0.16.1.js" type="text/javascript" ></script>
<script src="myapp.js" type="text/javascript" ></script>
</head>
<body>
<div id="myapp">
<div class="title">
<h1>MyApp</h1>
</div>
<div class="content">
<div id='kb_observable'>
<p>First name: <input class='text' data-bind="value: firstName" /></p>
<p>Last name: <input class='input-small pull-right' data-bind="value: lastName" /></p>
<p>Hello, <span data-bind="text: fullName"></span>!</p>
</div>
<div id="kb_collection_observable">
<div data-bind="if: persons">
<span>Has Persons</span>
</div>
<div data-bind="foreach: persons">
<p>First name: <input class='text' data-bind="value: firstName" /></p>
<p>Last name: <input class='input-small pull-right' data-bind="value: lastName" /></p>
</div>
</div>
</div>
</div>
</body>
</html>
//model
var PersonModel = Backbone.Model.extend({ urlRoot: '/MyApp/persons' });
var model = new PersonModel({ id: 1 });
model.fetch();
//viewmodel
var PersonViewModel = function (person) {
this.firstName = kb.observable(person, 'firstName');
this.lastName = kb.observable(person, 'lastName');
this.fullName = ko.computed((function () {
return "" + (this.firstName()) + " " + (this.lastName());
}), this);
};
var personViewModel = new PersonViewModel(model);
//binding
ko.applyBindings(personViewModel, $('#kb_observable')[0]);
//model
var PersonsModel = Backbone.Collection.extend({ model: PersonModel, url: '/MyApp/persons' });
var personsModel = new PersonsModel();
personsModel.fetch();
//viewmodel
var PersonsViewModel = function (persons) {
this.persons = kb.collectionObservable(persons)
};
var personsViewModel = new PersonsViewModel(personsModel);
//binding
ko.applyBindings(personsViewModel, $('#kb_collection_observable')[0]); });