рдиреЙрдХрдЖрдЙрдЯ, jQuery рдФрд░ ASP.NET MVC 3 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдЯреНрд╡рд┐рдЯрд░ рд▓рд╛рдЗрд╡ рдЦреЛрдЬ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдирд╛

рдпрд╣ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛, рдкреНрд░рджрд░реНрд╢рди рдФрд░ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рд╕реНрддрд░ рдХреЗ рд╕рд╛рде рдПрдХ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдП рдЧрдП рдлреНрд░рдВрдЯ-рдПрдВрдб рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреБрдЪреНрдЫ рдирд╣реАрдВ рд╣реИ, рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЖрдЬ рдХреА рдЙрдореНрдореАрдж рдХрд░рддреЗ рд╣реИрдВред рдИрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░, HTML рдорд╛рд░реНрдХрдЕрдк рдФрд░ AJAX рдХреЙрд▓ рдХреЗ рдЙрдмрд▓рддреЗ рд╣реБрдП jQuery рдорд┐рд╢реНрд░рдг рдореЗрдВ рдЦреЛ рдЬрд╛рдирд╛ рдЖрд╕рд╛рди рд╣реИ, рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рд╕рд░рд▓ рдЬреАрдпреВрдЖрдИ рдЬрд▓реНрджреА рд╕реЗ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдмреБрд░рд╛ рд╕рдкрдирд╛ рдмрди рд╕рдХрддрд╛ рд╣реИред

рдХреНрд▓рд╛рдЗрдВрдЯ рдХреА рдУрд░ рд╕реЗ рдХреБрдЫ рд╕рдВрд░рдЪрдирд╛ рдФрд░ рдСрд░реНрдбрд░ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдиреЙрдХрдЖрдЙрдЯ рдЬреИрд╕реЗ рдврд╛рдВрдЪреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИред рдиреЙрдХрдЖрдЙрдЯ рдПрдХ рдореБрдХреНрдд, рдЦреБрд▓рд╛ рд╕реНрд░реЛрдд рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╣реИ рдЬреЛ рдХреНрд▓рд╛рдЗрдВрдЯ рдкрд░ рдореЙрдбрд▓-рд╡реНрдпреВ-рд╡реНрдпреВ рдореЙрдбрд▓ (рдПрдорд╡реАрд╡реАрдПрдо) рдкреИрдЯрд░реНрди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдкреНрд░рд▓реЗрдЦрд┐рдд рд╣реИ рдФрд░ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╡реЗрдмрд╕рд╛рдЗрдЯ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рджреБрдирд┐рдпрд╛ рдХреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рдПрдХ рд╕рдореВрд╣ рдХреЗ рд╕рд╛рде рдПрдХ рдорд╣рд╛рди рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдмрд┐рдВрджреБ рд╣реИ рдЬреЛ рди рдХреЗрд╡рд▓ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреА рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рдпрд╣ рднреА рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдЕрдкрдиреА рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПред

рдЗрд╕ рдкреЛрд╕реНрдЯ рдореЗрдВ, рд╣рдо рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдЯреНрд╡рд┐рдЯрд░ рдкрд░ рд▓рд╛рдЗрд╡ рдЦреЛрдЬ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд░рд▓ рд▓реЗрдХрд┐рди рдкреНрд░рднрд╛рд╡реА рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдиреЙрдЪрдЖрдЙрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдкреНрд░рджрд░реНрд╢рди рдкреНрд▓рдЧрдЗрди, рдХреБрдЫ jQuery рдФрд░ ASP.NET MVC 3 рдмреИрдХреЗрдВрдб (рдпрд╛ рдореЙрдбрд▓, рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк) рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред


рд▓рдХреНрд╖реНрдп


рд╣рдорд╛рд░рд╛ рд▓рдХреНрд╖реНрдп рд╕рд░рд▓ рд╣реИ: рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдХреБрдЫ рдЦреЛрдЬ рдорд╛рдирджрдВрдбреЛрдВ (рдЬреИрд╕реЗ рд╣реИрд╢рдЯреИрдЧ рдпрд╛ рдЯреНрд╡рд┐рдЯрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо) рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рдЖрд╡реЗрджрди рдХреЛ рд╕рдВрдмрдВрдзрд┐рдд рд╕рдмрд╕реЗ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдЯреНрд╡реАрдЯ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╕рд╛рде рд╣реА, рдХреНрд▓рд╛рдЗрдВрдЯ рдкрд░ рдПрдХ рдкреГрд╖реНрдарднреВрдорд┐ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдХрдИ рдкрд░рд┐рдгрд╛рдо рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЕрдкрдбреЗрдЯ рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдП рддрд╛рдХрд┐ GUI рд╣рдореЗрд╢рд╛ рд╕рдмрд╕реЗ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдХрд┐рдП рдЧрдП рдЯреНрд╡реАрдЯ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗред (рдпрд╣ рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬрдм рдпрд╣рд╛рдВ рдФрд░ рдЕрднреА рд╣реЛ рд░рд╣реА рдХрд┐рд╕реА рдШрдЯрдирд╛ рдХреЛ рдЯреНрд░реИрдХ рдХрд░ рд░рд╣рд╛ рд╣реИред) рдЕрдВрддрддрдГ, рд╣рдо рдЗрд╕рдХреЗ рд╕рдорд╛рди рдХреБрдЫ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗ:


рдЪрд░рдг 1: рдореЙрдбрд▓ рдкрд░рд┐рднрд╛рд╖рд╛


рдЯреНрд╡рд┐рдЯрд░ рдПрдХ рдЦреЛрдЬ рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИ рдФрд░ рдЬреЛ рдПрдХреНрд╕рдПрдордПрд▓ (рдПрдЯрдо) рдпрд╛ рдЬреЗрдПрд╕рдПрди рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдЦреЛрдЬ рдкреНрд░рд╢реНрдиреЛрдВ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рд╣рдо рдЕрдкрдиреЗ рдореБрд╡рдХреНрдХрд┐рд▓ рдХреЛ рдЯреНрд╡рд┐рдЯрд░ рдПрдкреАрдЖрдИ рд╕реЗ рд╕реАрдзреЗ рд╕рдВрд╡рд╛рдж рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рд╣рдореЗрдВ рдХреИрд╢рд┐рдВрдЧ рдЬреЛрдбрд╝рдХрд░ рдЖрд╡реЗрджрди рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рдиреЗ рдХреЗ рдЕрд╡рд╕рд░ рд╕реЗ рд╡рдВрдЪрд┐рдд рдХрд░реЗрдЧрд╛, рдХреБрдЫ рдорд╛рдорд▓реЗ рдореЗрдВ рдЯреНрд╡рд┐рдЯрд░ рдХреНрд░реИрд╢, рдЖрджрд┐; рдЗрд╕рд▓рд┐рдП, рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ рдореЙрдбрд▓ рдмрдирд╛рдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛, рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдо рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ ASP.NET MVC 3 рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВред

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдПрдХ рдорд╛рдирдХ рдЦрд╛рд▓реА рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдПрдВ (рдбрд┐рд╕реНрдкреНрд▓реЗ рдЗрдВрдЬрди рдХреЗ рд░реВрдк рдореЗрдВ рд░реЗрдЬрд░ рдХреЗ рд╕рд╛рде) рдФрд░ рдПрдХ рдирд┐рдпрдВрддреНрд░рдХ рдЬреЛрдбрд╝реЗрдВ - рдЪрд▓реЛ рдЗрд╕реЗ рдЯреНрд╡рд┐рдЯрд░рдХрдВрдЯреНрд░реЛрд▓рд░ рдХрд╣рддреЗ рд╣реИрдВред рдлрд┐рд░ "рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛" рдХреНрд░рд┐рдпрд╛ рдХрд╛ рдирд╛рдо рдмрджрд▓реЗрдВ, рдЬреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдирдП рдирд┐рдпрдВрддреНрд░рдХ рдХреЗ рд╕рд╛рде "рдЦреЛрдЬ" рдХреЗ рд▓рд┐рдП рдмрдирд╛рдИ рдЧрдИ рдереАред рдирд┐рдпрдВрддреНрд░рдХ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:
public class TwitterController : Controller
{
[HttpGet]
public ActionResult Search()
{
return View();
}
}


* This source code was highlighted with Source Code Highlighter .

рдЕрдЧрд▓рд╛, рд╣рдо рдПрдХ рдПрдХреНрд╢рди рд╡рд┐рдзрд┐ рдмрдирд╛рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ рдЬреЛ рдЯреНрд╡рд┐рдЯрд░ рдкрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЦреЛрдЬ рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП, рд╣рдо рдЦреЛрдЬ рдПрдкреАрдЖрдИ рдХреЗ рдПрдЯрдо рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рдЕрдиреБрд░реЛрдз URL рдирд┐рдореНрди рдкреНрд░рд╛рд░реВрдк search.twitter.com/search.atom?q= [URL-encoded рдЦреЛрдЬ рдорд╛рдкрджрдВрдбреЛрдВ] рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИред рдХреНрдпреЛрдВрдХрд┐ рдПрдЯрдо рдПрдХреНрд╕рдПрдордПрд▓ рд╣реИ, рд╣рдо рдХрдИ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдФрд░ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд┐рдирдХреНрдпреВ рдЯреВ рдПрдХреНрд╕рдПрдордПрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдЯреНрд╡рд┐рдЯрд░ рдХреЛ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдбреЗрдЯрд╛ рджреЗрддрд╛ рд╣реИ рдЬрд┐рд╕рдХреА рд╣рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЗрд╕реЗ рдХрдо рд╕реЗ рдХрдо рдХрд░ рджреЗрдВрдЧреЗ)ред

рд▓реЗрдХрд┐рди рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рд▓рд┐рдП XML рдХреЛ рднреЗрдЬрдиреЗ рдХреА рд╣рдорд╛рд░реА рдХреЛрдИ рдЗрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реИ - рдмреЗрд╣рддрд░ JSONред рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рдЕрдзрд┐рдХрд╛рдВрд╢ рд╡рд╕реНрддреБрдУрдВ рдХреЛ JSON рдореЗрдВ рдмрджрд▓рдирд╛ рдЖрд╕рд╛рди рд╣реИ, рдФрд░ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд Json рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ, рдЬреЛ JsonResult рд▓реМрдЯрд╛рддрд╛ рд╣реИред рдпрд╣ рд╕рдм рдиреАрдЪреЗ рдЖрддрд╛ рд╣реИ:
[HttpPost]
public ActionResult Search( string query)
{
var atomResult = XDocument .Load( string .Format(
"http://search.twitter.com/search.atom?q={0}" ,
HttpUtility.UrlEncode(query)));
XNamespace ns = "http://www.w3.org/2005/Atom" ;
var searchResult =
from tweet in atomResult.Descendants(ns + "entry" )
let image = tweet.Elements(ns + "link" )
.Where(e => e.Attributes()
.Any(a => a.Name == "rel" &&
a.Value == "image" ))
.First(). Attribute ( "href" ).Value
let url = tweet.Elements(ns + "link" )
.Where(e => e.Attributes()
.Any(a => a.Name == "rel" &&
a.Value == "alternate" ))
.First(). Attribute ( "href" ).Value
select new
{
id = tweet.Element(ns + "id" ).Value,
author = tweet.Element(ns + "author" ).Element(ns + "name" ).Value,
imageUrl = image,
tweetUrl = url,
tweetText = tweet.Element(ns + "title" ).Value
};
return Json(searchResult);
}


* This source code was highlighted with Source Code Highlighter .

(рдКрдкрд░ рджрд┐рдП рдЧрдП рдХреЛрдб рдореЗрдВ рд▓реЗрдЦрдХ рдХреА рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдПрдХ рдЕрд╡рддрд╛рд░ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рдиреЗ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдЯреНрд╡реАрдЯ рд╕реЗ рд▓рд┐рдВрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╢рд╛рдорд┐рд▓ рд╣реИред)

рд╡рд╣ рд╕рдм - рд╣рдордиреЗ рдЕрдкрдирд╛ рдореЙрдбрд▓ рдмрдирд╛рдпрд╛!

рдЪрд░рдг 2: рджреГрд╢реНрдп рдореЙрдбрд▓ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛


рдЬреАрдпреВрдЖрдИ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рд╣рдореЗрдВ рдЕрдкрдиреЗ рд╕рдорд╛рдзрд╛рди рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд▓рд┐рдВрдХ рдЬреЛрдбрд╝рдиреЗ рд╣реЛрдВрдЧреЗред рдпрд╛ рддреЛ NuGet рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ, рдпрд╛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ jQuery, рдиреЙрдХрдЖрдЙрдЯ рдФрд░ jQuery.tmpl рд▓реЛрдб рдХрд░ рд░рд╣рд╛ рд╣реИред рдлрд┐рд░ рджреГрд╢реНрдп / рдЯреНрд╡рд┐рдЯрд░ рдкрд░ "Search.cshtml" рджреГрд╢реНрдп рдЬреЛрдбрд╝реЗрдВ / "рдорд╛рд╕реНрдЯрд░ рдкреЗрдЬ" рдпрд╛ рд▓реЗрдЖрдЙрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХрд░реЗрдВ - рдпрд╣ рдПрдХ рдЖрд╕рд╛рди рдХрд╛рдо рдХрд╛ рдПрдХ рд╡рд┐рдЪрд╛рд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╕рд╛рди рд╣реИ, рд╣рдорд╛рд░реЗ рд╕рдорд╛рди, рдпрджрд┐ рд╣рдо рдЕрд▓рдЧ-рдЕрд▓рдЧ рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рдлреИрд▓рд╛рддреЗ рд╣реИрдВ)ред рдЙрд▓реНрд▓реЗрдЦ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд┐рдВрдХ рдЬреЛрдбрд╝реЗрдВред рдЬрдм рдЖрдк рдРрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХреБрдЫ рдРрд╕рд╛ рд╣реЛрдЧрд╛:
<! DOCTYPE html >
< html >
< head >
< meta charset ="utf-8" />
< title > Twitter Live Search </ title >
< script src ="@Url.Content(" ~/ Scripts / jquery-1 . 6 . 2 . js ")"
type ="text/javascript" ></ script >
<script src= "@Url.Content(" ~/Scripts/jquery.tmpl.min.js ")"
type= "text/javascript" ></script>
<script src= "@Url.Content(" ~/Scripts/knockout-1.2.1.js ")"
type= "text/javascript" > </ script >
</ head >
< body >
<!-- TODO -->
</ body >
</ html >


* This source code was highlighted with Source Code Highlighter .

рдпрд╣ рд╣рдорд╛рд░реЗ рд╡рд┐рдЪрд╛рд░ рдореЙрдбрд▓ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХрд╛ рд╕рдордп рд╣реИред рджреГрд╢реНрдп рдореЙрдбрд▓ рдореЗрдВ рдХреНрд▓рд╛рдЗрдВрдЯ рдкрдХреНрд╖ рдкрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЙрдЬрд┐рдХ рд╢рд╛рдорд┐рд▓ рд╣реИ рдпрд╛, рдпрджрд┐ рдЖрдк рдЪрд╛рд╣реЗрдВ, рддреЛ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреНрдпрд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рдХреНрдпрд╛ рдЧреБрдг рд╣реИрдВ, рдмрд┐рдирд╛ рдХрд┐рд╕реА рдорд╛рд░реНрдХрдЕрдк рддрддреНрд╡ рдпрд╛ рдбреЛрдо рддрддреНрд╡реЛрдВ рдХреЗ рд╕реАрдзреЗ рдмрдВрдзрди рдХреЗ рдмрд┐рдирд╛ред

рдЗрд╕ рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП, рджреГрд╢реНрдп рдореЙрдбрд▓ рдЕрддреНрдпрдВрдд рд╕рд░рд▓ рд╣реИ: рдЗрд╕рдореЗрдВ рд╡рд░реНрддрдорд╛рди рдЦреЛрдЬ рдХреНрд╡реЗрд░реА рдФрд░ рдкрд╛рдП рдЧрдП рдЯреНрд╡реАрдЯреНрд╕ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП 2 рдЧреБрдг рд╣реИрдВ, рдФрд░ рддрджрдиреБрд╕рд╛рд░ рдореЙрдбрд▓ рдкрд░ рдЦреЛрдЬ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдзрд┐ рд╣реИред рдпрд╣ рдЗрд╕ рддрд░рд╣ рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ:
<script type= "text/javascript" >
function SearchViewModel() {
this .query = ko.observable( '' );
this .tweets = ko.observableArray();
}

SearchViewModel.prototype.search = function () {
var q = this .query();
if (q.length > 0) {
$.ajax({
type: 'POST' ,
url: '/Twitter/Search' ,
data: { query: q },
dataType: 'json' ,
success: function (data) {
// TODO
}.bind( this )
});
} else {
// TODO
}
};
</script>


* This source code was highlighted with Source Code Highlighter .

рдпрд╣ рдХрд╣рдирд╛ рдХрдард┐рди рд╣реИ рдХрд┐ рдпрд╣рд╛рдВ рдХреБрдЫ рднреА рд╕рд╛рд░реНрдердХ рд╣реИ; рдЕрдиреБрд░реЛрдз рдФрд░ рдЯреНрд╡реАрдЯ рдЧреБрдг рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд░реВрдк рд╕реЗ рдЦрд╛рд▓реА рд╣реИрдВ, рдЦреЛрдЬ рд╡рд┐рдзрд┐ рд╕рд░реНрд╡рд░ рдкрд░ рд╣рдорд╛рд░реЗ рдореЙрдбрд▓ рдХреЗ рд▓рд┐рдП рдПрдХ AJAX рдЕрдиреБрд░реЛрдз рднреЗрдЬрдиреЗ рдФрд░ JSON рдСрдмреНрдЬреЗрдХреНрдЯ (рдЯреНрд╡реАрдЯреНрд╕ рдХреА рд╕рд░рдгреА) рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рдгрд╛рдо рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП jQuery рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИред

рд╣рдореЗрдВ рдЦреЛрдЬ рд╡рд┐рдзрд┐ рдореЗрдВ "рд╕рдлрд▓" рд╣реИрдВрдбрд▓рд░ рдХреЛ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП? рд╣рдо рдЯреНрд╡реАрдЯреНрд╕ рдХреА рд╕рд░рдгреА рдХреЛ рд╕рд╛рдлрд╝ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдирдП рдЦреЛрдЬ рдкрд░рд┐рдгрд╛рдо рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ рд╣рдо рдЕрдкрдиреЗ рдЦреЛрдЬ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЗ рд▓рд┐рдП рд▓рдЧрд╛рддрд╛рд░ "рдЕрдкрдбреЗрдЯ" рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ рд╣рдо рдкреВрд░реЗ рд╕рдВрдЧреНрд░рд╣ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рдмрд┐рдирд╛ рдирдП рдЯреНрд╡реАрдЯ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗ (рдФрд░ рдкреБрд░рд╛рдиреЗ рдХреЛ рд╣рдЯрд╛ рджреЗрдВ)ред

рдпрд╣ рдиреЙрдХрдЖрдЙрдЯ рдХреЗ рд▓рд┐рдП рдореИрдкрд┐рдВрдЧ рдкреНрд▓рдЧрдЗрди рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рд╢рд╛рдирджрд╛рд░ рдЕрд╡рд╕рд░ рд╣реИред рдЬрдм рд╣рдордиреЗ рдЗрд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдФрд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рд▓рд┐рдВрдХ рдЬреЛрдбрд╝рд╛, рддреЛ рд╣рдо рдПрдХ рд╕рдлрд▓ AJAX рдЕрдиреБрд░реЛрдз рд╣реИрдВрдбрд▓рд░ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
success: function (data) {
ko.mapping.updateFromJS( this .tweets, data);
}.bind( this )


* This source code was highlighted with Source Code Highlighter .

рдФрд░ рдлрд┐рд░ рдЯреНрд╡реАрдЯреНрд╕ рдХреЗ рд╕рдВрдЧреНрд░рд╣ рдХреЗ рд▓рд┐рдП " рдкреНрд░рдореБрдЦ рдкрд░рд┐рднрд╛рд╖рд╛ " рд╕реЗрдЯ рдХрд░реЗрдВ (рдЬреЛ рдХрд┐ рдбрд┐рд╕реНрдкреНрд▓реЗ рджреНрд╡рд╛рд░рд╛ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдХрд┐рди рддрддреНрд╡реЛрдВ рдХреЛ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдпрд╛ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП), рд╣рдо рд╕рд┐рд░реНрдл рд╣рдорд╛рд░реЗ рдирд┐рд░реНрдорд╛рддрд╛ рдХреЛ рдереЛрдбрд╝рд╛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрддреЗ рд╣реИрдВ:
function SearchViewModel() {
this .query = ko.observable( '' );
this .tweets = ko.mapping.fromJS(
[],
{
key: function (tweet) { return ko.utils.unwrapObservable(tweet.id) }
});
}


* This source code was highlighted with Source Code Highlighter .

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╣рдо рдЯреНрд╡реАрдЯреНрд╕ рдХреЗ рд╕рдВрдЧреНрд░рд╣ рдХреЗ рд▓рд┐рдП рдХреБрдВрдЬреА рдХреЛ рдЖрдИрдбреА рдорд╛рди рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдЯреНрд╡рд┐рдЯрд░ рднреА рдЖрд╕рд╛рдиреА рд╕реЗ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдкрдХреЛ рдореИрдкрд┐рдВрдЧ рдкреНрд▓рдЧрдЗрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдиреЙрдХрдЖрдЙрдЯ рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ рдЬрд╛рдПрдВред

рдЕрдЧрд▓рд╛: рдСрдЯреЛ-рдЕрдкрдбреЗрдЯ рдХреА рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдиред рд╣рд░ рдмрд╛рд░ рдЬрдм рдХреЛрдИ рдЦреЛрдЬ рдХреНрд╡реЗрд░реА рд╣реЛрддреА рд╣реИ, рддреЛ рд╕рдВрдмрдВрдзрд┐рдд рдЯреНрд╡реАрдЯ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдХрд╣рддреЗ рд╣реИрдВ, рдореЙрдбрд▓ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХреЛ рдкреНрд░рддрд┐рдмрд┐рдВрдмрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рд░ 3 рд╕реЗрдХрдВрдбред рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ AJAX рдЦреЛрдЬ рдЕрдиреБрд░реЛрдз рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдлрд▓ рдХреЙрд▓рдмреИрдХ рдмрдирд╛рдирд╛ рд╣реИ рдЬреЛ рдкреБрдирд░рд╛рд╡рд░реНрддреА рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд┐рд▓рдВрдмрд┐рдд, рдЦреЛрдЬ рд╡рд┐рдзрд┐ред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдкреВрд░реНрдг рджреГрд╢реНрдп рдореЙрдбрд▓ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
<script type= "text/javascript" >
function SearchViewModel() {
this .query = ko.observable( '' );
this .tweets = ko.mapping.fromJS(
[],
{
key: function (tweet) { return ko.utils.unwrapObservable(tweet.id) }
});
this .autoRefreshId = null ;
}

SearchViewModel.prototype.search = function () {
var timeoutId = this .autoRefreshId;
if (timeoutId) {
window.clearTimeout(timeoutId);
this .autoRefreshId = null ;
}
var q = this .query();
if (q.length > 0) {
$.ajax({
type: 'POST' ,
url: '/Twitter/Search' ,
data: { query: q },
dataType: 'json' ,
success: function (data) {
ko.mapping.updateFromJS( this .tweets, data);
this .autoRefreshId = window.setTimeout(
this .search.bind( this ), 3000);
}.bind( this )
});
} else {
ko.mapping.updateFromJS( this .tweets, []);
}
};
</script>


* This source code was highlighted with Source Code Highlighter .

(рдЬрдм рдЦреЛрдЬ рдХреНрд╡реЗрд░реА рдЗрдирдкреБрдЯ рд▓рд╛рдЗрди рдЦрд╛рд▓реА рд╣реЛ, рддреЛ рдСрдЯреЛ-рдЕрдкрдбреЗрдЯ рдмрдВрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореИрдВрдиреЗ рдХреБрдЫ рдкрдВрдХреНрддрд┐рдпрд╛рдБ рдЬреЛрдбрд╝реАрдВ; рдкреНрд▓рд╕ рдПрдХ рдЬрд╛рдБрдЪ рдЬреЛ рдХрд┐рд╕реА рднреА рдирдИ рдЦреЛрдЬ рдХреЗ рд╢реБрд░реВ рд╣реЛрдиреЗ рдкрд░ рдЪрд▓рдиреЗ рд╡рд╛рд▓реА рдЦреЛрдЬреЛрдВ рдХреЛ рдмрд╛рдзрд┐рдд рдХрд░рддреА рд╣реИред рдпрджрд┐ рдЖрдк рдЦрд╛рд▓реА рдХреНрд╡реЗрд░реА рдЦреЛрдЬрддреЗ рд╣реИрдВ, рддреЛ рднреА рдЦреЛрдЬ рдкрд░рд┐рдгрд╛рдо рд╢реВрдиреНрдп рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВред)

рдЪрд░рдг 3: рдбрд┐рдЬрд╝рд╛рдЗрди рджреЗрдЦреЗрдВ


рдЪреАрдЬреЛрдВ рдХреЛ рд╕рд░рд▓ рдФрд░ рд╕реНрдкрд╖реНрдЯ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рджреГрд╢реНрдп рдореЗрдВ рдХреЗрд╡рд▓ рдЦреЛрдЬ рдХреНрд╡реЗрд░реА рдХреА рдЗрдирдкреБрдЯ рд▓рд╛рдЗрди рдФрд░ рдЯреНрд╡реАрдЯреНрд╕ рдХреА рд╕реВрдЪреА рд╢рд╛рдорд┐рд▓ рд╣реЛрдЧреАред рд╣рдо рдЗрд╕ рднрд╛рд╡рдирд╛ рдореЗрдВ рдХреБрдЫ рд╣рд╛рд╕рд┐рд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ:
< form >
< input type ="search" placeholder ="Input #hashtag, @@username or something else" autofocus />
< input type ="submit" value ="Search" />
</ form >

< ul id ="tweets" >
< li >
< a href ="[url-of-tweet]" title ="[author-name]" >
< img src ="[url-of-author-image]" alt ="[author-name]" />
</ a >
< h6 > [author-name] </ h6 >
< p > [tweet-text] </ p >
</ li >
<!-- More tweets... -->
</ ul >


* This source code was highlighted with Source Code Highlighter .

рдЖрдЗрдП рдХреБрдЫ рдШреЛрд╖рдгрд╛рддреНрдордХ рдиреЙрдХрдЖрдЙрдЯ рдбреЗрдЯрд╛ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рднреА рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рдЬреЛ рджреГрд╢реНрдп рдФрд░ рджреГрд╢реНрдп рдореЙрдбрд▓ рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред рдпрджрд┐ рд╣рдо рдЦреЛрдЬ рдлрд╝реЙрд░реНрдо рдХреЛ рдереЛрдбрд╝рд╛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рддреЗ рд╣реИрдВ ...
< form data-bind ="submit: search" >
< input type ="search" data-bind ="value: query, valueUpdate: 'afterkeydown'" placeholder ="Input #hashtag, @@username or something else" autofocus />
< input type ="submit" value ="Search" />
</ form >


* This source code was highlighted with Source Code Highlighter .


... рдЬрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЦреЛрдЬ рдХреНрд╡реЗрд░реА рдлрд╝реАрд▓реНрдб рдореЗрдВ рдкрд╛рда рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддрд╛ рд╣реИ, рддреЛ рдиреЙрдХрдЖрдЙрдЯ рджреГрд╢реНрдп рдореЙрдбрд▓ рдХреА рдХреНрд╡реЗрд░реА рд╕рдВрдкрддреНрддрд┐ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЕрдкрдбреЗрдЯ рдХрд░ рджреЗрдЧрд╛ рдФрд░ рдЬреИрд╕реЗ рд╣реА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ Enter рдХреБрдВрдЬреА рджрдмрд╛рдПрдЧрд╛, рдЦреЛрдЬ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХреА рдЬрд╛рдПрдЧреАред

рдЦреЛрдЬ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛? рдЙрддреНрдХреГрд╖реНрдЯ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдиреЙрдХрдЖрдЙрдЯ рдЯреЗрдореНрдкрд▓реЗрдЯ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП! рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдкреНрд░рддреНрдпреЗрдХ рдЯреНрд╡реАрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рдЯреЗрдореНрдкрд▓реЗрдЯ рдмрдирд╛рдПрдВ:
< script id ="tweetTemplate" type ="text/html" >
<li data-bind= "attr: { id: id }" >
<a data-bind= "attr: { href: tweetUrl, title: author }" >
<img data-bind= "attr: { src: imageUrl, alt: author }" />
</a>
<h6 data-bind= "text: author" ></h6>
<p data-bind= "text: tweetText" ></p>
</li>
</ script >


* This source code was highlighted with Source Code Highlighter .

рдлрд┐рд░ рд╡реНрдпреВ рдореЙрдбрд▓ рдореЗрдВ рдЯреНрд╡реАрдЯреНрд╕ рдХреА HTML рд╕реВрдЪреА рдХреА рдбреЗрдЯрд╛-рдмрд╛рдЗрдВрдб рдкреНрд░реЙрдкрд░реНрдЯреА, рдЙрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдкрдирд╛ рдЯреЗрдореНрдкрд▓реЗрдЯ рд╕реЗрдЯ рдХрд░рдирд╛ред рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдЖрд╕рд╛рди:
< ul id ="tweets"
data-bind =" template: {
name: 'tweetTemplate' ,
foreach: tweets
}, visible: tweets (). length > 0" >
</ ul >


* This source code was highlighted with Source Code Highlighter .

(рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпрджрд┐ рджреГрд╢реНрдп рдореЙрдбрд▓ рдореЗрдВ рдЯреНрд╡реАрдЯ рдирд╣реАрдВ рд╣реИрдВ рддреЛ рд╕реВрдЪреА рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджреЗрдЧреА)

рдмреЛрдирд╕: рдПрдХ рдПрдиреАрдореЗрд╢рди рдЬреЛрдбрд╝реЗрдВ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рддрдм рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдирдП рдЯреНрд╡реАрдЯ рдХреЛ рд╕реВрдЪреА рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред
< ul id ="tweets"
data-bind =" template: {
name: 'tweetTemplate' ,
foreach: tweets ,
afterAdd: function ( element ) {
$( element ). hide (). fadeIn ( 'fast' );
}
}, visible: tweets (). length > 0" >
</ ul >


* This source code was highlighted with Source Code Highlighter .

рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░, рдХреЗрд╡рд▓ рдПрдХ рд╣реА рдХрд╛рдо рдХрд░рдирд╛ рдмрд╛рдХреА рд╣реИ - рдмреВрдЯрд╕реНрдЯреНрд░реИрдкрд┐рдВрдЧ рд▓реЙрдЬрд┐рдХред рдЬрдм DOM рдмреВрдЯ рдХрд░рддрд╛ рд╣реИ, рддреЛ рд╣рдореЗрдВ рдЕрдкрдиреЗ рд╡реНрдпреВ рдореЙрдбрд▓ рдХреЛ рддрддреНрдХрд╛рд▓ рдХрд░рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ рдФрд░ рдиреЙрдХрдЖрдЙрдЯ рд╕реЗ рд╣рдорд╛рд░реЗ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдХреЛ рд╕рдВрд▓рдЧреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣реЗрдВред JQuery рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рддреИрдпрд╛рд░ рдЗрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рдореЗрдВ рдХреЛрдб рдХреА рдПрдХ рдкрдВрдХреНрддрд┐:
<script type= "text/javascript" >
$( function () {
ko.applyBindings( new SearchViewModel());
});
</script>


* This source code was highlighted with Source Code Highlighter .

рдФрд░ рд╣реЛ рдЧрдпрд╛! Chrome 12, рдЗрдВрдЯрд░рдиреЗрдЯ рдПрдХреНрд╕рдкреНрд▓реЛрд░рд░ 9 рдФрд░ рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ 5 рдореЗрдВ рдореЗрд░реА рд╡рд┐рдВрдбреЛрдЬ 7 рдорд╢реАрди рдкрд░ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЧрдпрд╛ред рдпрд╣рд╛рдВ рдПрдХ рд╕рдВрдкреВрд░реНрдг рд╕рдорд╛рдзрд╛рди рд╣реИ (рдЬрд╣рд╛рдВ рдореИрдВрдиреЗ рдЗрд╕реЗ рдХрдо рднрдпрд╛рдирдХ рджрд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╕реАрдПрд╕рдПрд╕ рдЬреЛрдбрд╝рд╛): TwitterLiveSearchLab.zip

Source: https://habr.com/ru/post/In123692/


All Articles