рдиреЙрдХрдЖрдЙрдЯ рдХреЗ рд▓рд┐рдП рд▓рд╛рдЗрдирдХ-рдЬреИрд╕реЗ рд╕рд┐рдВрдЯреИрдХреНрд╕

рд╣рдорд╛рд░реА рдЯреАрдо рдХреЛ MVVM рдкреИрдЯрд░реНрди рдФрд░ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдиреЙрдХрдЖрдЙрдЯ рд░реВрдкрд░реЗрдЦрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡реЗрдм рдкреЛрд░реНрдЯрд▓ рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдП рдПрдХ рд╕рд╛рд▓ рдмреАрдд рдЪреБрдХрд╛ рд╣реИред рдереЛрдбрд╝рд╛-рдереЛрдбрд╝рд╛ рдХрд░рдХреЗ, рдЕрдиреБрднрд╡ рдЬрдорд╛ рд╣реЛ рд░рд╣рд╛ рдерд╛, рд╡рд┐рднрд┐рдиреНрди рд╕рдорд╛рдзрд╛рди рджрд┐рдЦрд╛рдИ рджрд┐рдП, рдЕрдЪреНрдЫреЗ рдФрд░ рдмреБрд░реЗ рд╡реНрдпрд╡рд╣рд╛рд░, рдФрд░ рдЕрдм, рдЗрд╕рд▓рд┐рдП рдмреЛрд▓рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдкрд░рд┐рдкрдХреНрд╡ рдерд╛ред Linq.js рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдкрд╣рд▓реЗ рд╕реЗ рд╣реА lin рд╡рд╛рдХреНрдп рд░рдЪрдирд╛ рдХреЗ рд▓рд┐рдП рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд▓рд┐рдП рдореМрдЬреВрдж рд╣реИ, рдФрд░ рдПрдХ рд▓рдВрдмреЗ рд╕рдордп рдХреЗ рд▓рд┐рдП рд╣рдо рд╕реЛрдЪ рд░рд╣реЗ рдереЗ рдХрд┐ рдХреНрдпрд╛ рдЗрд╕реЗ рд╣рдорд╛рд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдЦреАрдВрдЪ рд▓рд┐рдпрд╛ рдЬрд╛рдПред рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЙрдкрдпреЛрдЧ рдХреЗ рдЙрджрд╛рд╣рд░рдг, рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рдиреЙрдХрдЖрдЙрдЯ рдХреЗ рд╕рд╛рде рдорд┐рд▓рдХрд░ред

рд╡рд┐рдЪрд╛рд░ рдпрд╣ рд╣реИ рдХрд┐ рдореБрдЭреЗ рд▓рдЧрд╛ рдХрд┐ рд▓рд╛рдЗрдирдХ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рдЕрдВрджрд░ рдПрдХ рд╕рдВрдЧреЛрд╖реНрдареА рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИред

рддреБрд▓рдирд╛ рдХреЗ рд▓рд┐рдП, рдлрд┐рдбрд▓ рд╕реЗ рдХреЛрдб:

this.filteredItems = ko.computed(function() { var term = this.searchTerm(); return this.items.where(function(item) { return item.name.indexOf(term) > -1; }); }, this);
      
      





рдФрд░ рдХреЛрдб рдЬреЛ рдореИрдВ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рд▓рд┐рдЦрдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛:

  this.filteredItems = this.items .Where(function(item) { return item.name.indexOf(this.searchTerm()) > -1; });
      
      







рдЙрдкрд░реНрдпреБрдХреНрдд рдЧрдгрдирд╛ рдХрд┐рдП рдЧрдП рдПрдирдХреИрдкреНрд╕реБрд▓реЗрд╢рди рдХреЗ рдмрд╛рдж, рдпрд╣ рдирд┐рдХрд▓рд╛ рдХрд┐ linq.js рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреА рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдиреЙрдХрдЖрдЙрдЯ рдореЗрдВ рдирд┐рд░реНрдорд┐рдд рдкрд░реНрдпрд╛рдкреНрдд рдЙрдкрдХрд░рдгред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЙрдиреНрд╣реЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ рд▓рд┐рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдФрд░ рдмрд╛рд╣рд░ рдХреЛрдИ рдЕрдВрддрд░ рдирд╣реАрдВ рд╣реЛрдЧрд╛, рднрд▓реЗ рд╣реА рдпрд╣ рд▓реВрдк рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рд╕реАрдзрд╛ рдФрд░ рд╕рд░рд▓ рд╣реЛред



рддреЛ, рдкрд╣рд▓реЗ рд╣рдо рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд╕реНрддреБ рддреИрдпрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ:

 var methods = { First: function(predicate) { return ko.computed(function() { return ko.utils.arrayFirst(this(), predicate); }, this, { deferEvaluation: true }); }, Select: function(func) { return ko.computed(function() { return ko.utils.arrayMap(this(), function(item) { return ko.utils.unwrapObservable(func(item)); }); }, this, { deferEvaluation: true }); }, SelectMany: function(func) { return ko.computed(function() { var result = []; ko.utils.arrayForEach(this(), function(item) { result = result.concat(ko.utils.unwrapObservable(func(item))); }); return result; }, this, { deferEvaluation: true }); }, Where: function(predicate) { return ko.computed(function() { return ko.utils.arrayFilter(this(), predicate); }, this, { deferEvaluation: true }); }, Distinct: function(func) { if (!func) { return this.DistinctValue(); } return ko.computed(function() { var obj = {}; return ko.utils.arrayFilter(this(), function(item) { var val = ko.utils.unwrapObservable(func(item)); return obj[val] ? false : (obj[val] = true); }); }, this, { deferEvaluation: true }); }, DistinctValue: function() { return ko.computed(function() { var obj = {}; return ko.utils.arrayFilter(this(), function(val) { return obj[val] ? false : (obj[val] = true); }); }, this, { deferEvaluation: true }); }, Sum: function(func) { return func ? this.Select(func).Sum() : this.SumValue(); }, SumValue: function() { return ko.computed(function() { var result = 0; ko.utils.arrayForEach(this(), function(item) { result = result + (+item); }); return result; }, this, { deferEvaluation: true }); }, StringJoin: function(joinString) { joinString = joinString || ', '; return ko.computed(function() { return this().join(joinString); }, this, { deferEvaluation: true }); }, };
      
      





рджреВрд╕рд░реА рдХреНрд░рд┐рдпрд╛ рдЬреЛ рд╣рдо рдЕрд╡рд▓реЛрдХрдиреАрдп рдФрд░ рдЧрдгрдирд╛ рдХреА рдЧрдИ рд╣реИ, рдЙрд╕ рдкрд░ рд╣реБрдХ рдХрд░рддреЗ рд╣реИрдВ:

  for (var i in methods) { ko.observableArray.fn[i] = methods[i]; ko.computed.fn[i] = methods[i]; }
      
      





рдкрдХрд╡рд╛рди рддреИрдпрд╛рд░ рд╣реИ, рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдЙрджрд╛рд╣рд░рдг:

  self.DistinctEntities = policy.Coverages .SelectMany(function(item) { return item.Entities; }) .Distinct(function(item) { return item.Name; }); self.EmployeeCount = policy.CoveredTotalCurrentYear .Sum(function (item) { return item.Quantity; }); self.LineOfCoverageColumnName = policy.Coverages .Select(function (item) { return item.LineOfCoverage.ShortDisplayName; }) .StringJoin();
      
      







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

 Map: function (converter) { var oldValues = []; var oldResults = []; return ko.computed(function() { var values = this().slice(); var results = []; ko.utils.arrayForEach(values, function(item) { var index = oldValues.indexOf(item); results.push(index > -1 ? oldResults[index] : converter(item)); }); oldValues = values; oldResults = results; return results; }, this, { deferEvaluation: true }); },
      
      





рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:

 self.Coverages = policy.Coverages.Map(function(coverage) { return new coverageViewModel(coverage); });
      
      







PS рддрд░реАрдХреЛрдВ рдХреА рд╕реВрдЪреА рдЕрднреА рддрдХ LinQ рдХреЗ рдкреВрд░реЗ рд╕реЗрдЯ рдХреЛ рдХрд╡рд░ рдирд╣реАрдВ рдХрд░рддреА рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реИред



All Articles