Depanare sfat pentru directivele unghiulare (Sau, Studiu de a iubi cratime peste tot din nou)

Eu am o pereche de aplicaţii care face $http.get() apeluri şi am vrut să fie în măsură pentru a afişa un mesaj de eroare de frumos formatate cu urât eroare detalii ascunse, dar accesibile.  Practic, Acest lucru:

image

Şi apoi în cazul în care utilizatorul face clic pe eroarea, ei văd mai multe informaţii:

image

Lucruri simple.  Din moment ce exact aceeaşi eroare potenţiale pot apărea în ecranul administrative, precum şi ecranul de utilizatorul final, Acesta numit în mod clar de directivă unghiulare personalizate.  I  găsit acest remarcabilă serie de articole (http://weblogs.asp.net/dwahlin/creating-custom-angularjs-directives-part-i-the-fundamentals) de mare Dan Wahlin.  Urmând sfatul lui, Am creat foarte repede o <Bună ziua-lume> Directiva şi sa mutat pe la meu mai complexe eroare de afişare racleta. Am fugit într-un pic de probleme cu prezenta directivă mai complexe.  Fericit, un fel de întâmplare, Mi-a spus WebStorm (editorul folosesc aceste zile) că fişierul JS a fost un fişier unghiulare şi a ajutat-mi dau seama problema.  Acesta este codul pentru Directiva în sine:

angular.module("CDLApp").Directiva("generalCdlErrorHandler", funcţia() {

reveni {
limita: "E",
înlocui: adevărat,

domeniul de aplicare: {
retrieveLastConfigurationError: "&"
},

şablon:
'<div clasa = "alertă-pericol de alertă" rolul = "alerta" ng-init = "doShowExpandedErrorDetails = true" ng-Arată = "retrieveLastConfigurationError()">' +
"A fost o eroare de I/O sau alte. Acest lucru se întâmplă, de obicei, deoarece fișierul de date de configurare nu a putut fi " +
"găsit sau fişierul de configurare conţine informaţii inexacte (cum ar fi o bibliotecă de documente de referinţă " +
"care nu exista).' +
' <br />' +
' <div ng-Arată = "doShowExpandedErrorDetails">' +
' <o href = "#" ng-clic = "doShowExpandedErrorDetails = ! doShowExpandedErrorDetails">' +
"Click aici pentru a ascunde detalii." +
' </o>: ' +
' <br />' +
' <pre>{{retrieveLastConfigurationError() | JSON}}</pre>' +
' <br />' +
' </div>' +
' <div ng-Arată = "!doShowExpandedErrorDetails">' +
' <o href = "#" ng-clic = "doShowExpandedErrorDetails = ! doShowExpandedErrorDetails">' +
"Click aici pentru a extinde detaliile de eroare." +
' </o>' +
' </div>' +
'</div>'
};
});

Practic, Eu sunt crearea de un element nou numit un "generalCdlErrorHandler".  Are nevoie de acces la o funcţie numită retrieveLastConfigurationError şi care este manipulat în obiectul de aplicare.  Am, probabil, ar putea doar folosit societăţii-mamă de aplicare, dar asta se simte leneş.  Dacă cineva crede că ar trebui să au făcut asta, Mi-ar plăcea să aud despre asta în Comentarii.

Acest lucru a fost tot fin, dar nu am fost obtinerea nimic.  Nici o eroare a apărut în consolă (cel puţin o dată am stabilit toate erorile de sx am creat pe drum).  Pur şi simplu nu am lua orice ieşire din prezenta directivă.  Am mers şi a adăugat unele text static înainte de directivă ng-Arată şi * a * obţine că. Acest lucru făcut să mă gândesc că, probabil, Directiva nu a fost permis să implicit crea vars noi ca "doShowExpandedErrorDetails" sau au un "ng-init" acolo. 

M-am dus înapoi în HTML pentru a vedea dacă am avut un tip şi de această dată WebStorm m-au ajutat.  Am avut fost trece în funcţia de retrieveLastConfigurationError ca aceasta:

<retrieveLastConfigurationError="CDLController.retrieveLastConfigurationError generale-cdl--handler de erori()">
</general-cdl--handler de erori>

Dar într-adevăr nevoie să fie acest lucru:

<general-cdl-eroare-handler prelua-ultimul-configurare-eroare = "CDLController.retrieveLastConfigurationError()">
</general-cdl--handler de erori>

WebStorm a fost destul de inteligent pentru a şti că a trebuit să fie despărţite în silabe.  Dacă aceasta nu ar fi furnizat această sugestie, Am ar, probabil, fie încă depanare acest lucru Zâmbet.  Distracţie ori!

Trucul este aceasta: nu numai este numele elementului Directiva despărţite în silabe, Deci sunt orice atributele adăugaţi la acesta.  După ce am adăugat cratimelor, totul a lucrat mare.  Diana tutorial întâmplat de a folosi numele scurt singur, Deci nu am face legătura.

Sper că acest lucru vă ajută cineva.

</scop>

undefinedAboneaza-te la blog-ul meu.

Urmaţi-mă pe Twitter, la http://www.twitter.com/pagalvin

IE9 Într-adevăr nu-mi place atunci când ia o comandă rapidă cu dumneavoastră <durata de> Tag-uri

Am căzut într-un obicei prost de a folosi Chrome tot timpul.  Este "rău", deoarece lucrurile dezvolta într-adevăr nevoie pentru a rula pe o mulţime de alte browsere web, inclusiv, din pacate IE8.  Laptop-ul meu de lucru a IE9 standard indiferent de motiv) şi am fost doar a face o scurtă Verificaţi pentru a vedea ce lucruri privit ca şi... ea nu a fost destul.  De exemplu:

image

Are * presupune * pentru a arata ca acest lucru:

image

 

Nu numai că a fost oprit, dar mea click evenimente nu au fost tragere.  (Cele mai multe, Oricum).

Vizual, se parea ca lucrurile au început să meargă pe şine lângă link-ul "Advanced Setup".  Am săpat în acea parte a HTML şi a constatat că am avut această linie:

<span class = "glyphicon glyphicon-nou-fereastra" />

Asta pare ca admise sintaxă ("Versiune de chrome 40.02214.94 m"este bine cu ea). Am mers şi a schimbat-o oricum, ca:

<span class = "glyphicon glyphicon--fereastră nouă"></durata de>

Care-l fix.

Un astfel de lucru mici mic cauzat o astfel de mizerie imens de un ecran.  Distracţie ori.

Acest lucru sa întâmplat să fie un iute fix, dar, de asemenea, este genul de lucru care devine coloanei vertebrale aliniere când îl Vezi.  Există peste 500 linii de cod HTML în această funcţie de puţin admin şi tu nu vreau doar să găsi te sapa printre aceste buruieni, vreodată Zâmbet.

</scop>

undefinedAboneaza-te la blog-ul meu.

Urmaţi-mă pe Twitter, la http://www.twitter.com/pagalvin

HTTP 406 Eroare atunci când se utilizează unghiulară $http.get împotriva SharePoint restul sfârşitul puncte

Actualizare: Marc AD ndersson a subliniat această bucată mare de informaţii: http://blogs.Office.com/2014/08/13/JSON-Light-support-rest-SharePoint-API-released/. Care explică mult :).

Care ar putea fi mai rău titlul un blog post vreodată! Anyhoo.

De obicei face tot de meu prototipuri împotriva o instanta O365. Am meu instanţă personale, astfel încât nu trebuie să fie îngrijorat de oricine altcineva care afectează. Ca o deoparte-amintesc când am apel efectuate în jurul maşinilor virtuale pe laptop-urile noastre cu muşchi – SQL Server, IIS, se decide Hyper-V vs. VMWare? Anyhoo...

Am dezvoltat un app folosind unghiulară în acest mediu care face, Printre alte lucruri, Acest lucru:

$http.get(serverUrl)
.succesul(funcţia(date, statutul, anteturi, config) {

var getLinksResponse = datele;

getLinksResponse.value.forEach(funcţia(Rezultatul) {

// şi aşa mai departe şi astfel încât spuma

Acest lucru a fost de lucru bine în două medii diferite SharePoint online. Cu toate acestea, când colegul meu l-a portat la o instanţă de Cloudshare, El a fost obtinerea o HTTP 406 eroare (care a fost prima dată am ajuns vreodată că unul, Deci... yay, bănuiesc). Am facut un pic de cercetare şi am observat că antetul "Accepta" a fost oprit. SharePoint online a fost perfect fericit cu:

Accepta: cerere/json

Dar instanta cloudshare (care este SP prem, Găzduit într-un server virtual) vrut clasic "odata = verbose" adăugat în, precum şi:

Accepta: cerere/json;Odata = verbose

Pentru a stabili că, am adăugat antetul ca atare:

var config = {anteturi: {
"Accept": ' cerere/json;Odata = verbose'
}
};

$http.get(serverUrl,config)
.succesul(funcţia(date, statutul, anteturi, config) {

var getLinksResponse = datele;

getLinksResponse.value.forEach(funcţia(Rezultatul) {

// şi aşa mai departe şi astfel încât spuma

Că am scăpat de 406, dar, de asemenea, modificat formatul de răspuns. A fost mai mult... "vorbaret". (haha!) Mai multe modificări au fost necesare şi aici este rezultatul final:

var config = {anteturi: {
"Accept": ' cerere/json;Odata = verbose'
}
};

$http.get(serverUrl,config)
.succesul(funcţia(date, statutul, anteturi, config) {

var getLinksResponse = datele;

getLinksResponse.d.results.forEach(funcţia(Rezultatul) {

// şi aşa mai departe şi astfel încât spuma

Acest lucru doar sa transformat într-un 30 problema minut pentru noi, asa ca am avut ghinion. Sperăm că cineva aceasta constată utile.

</scop>

"Cum să": Enable Multiple părţi Web SharePoint unghiulară pe aceeaşi pagină

Acest blog posturi descrie cum puteţi avea mai multe Angular.js pe bază de părți web SharePoint (referite prin o parte web editor de conţinut) pe aceeaşi pagină. Sunt de asteptare un editor de conţinut web parte (CEWP) ce referinţe JavaScript construită folosind cadrul de Angular.js o "unghiulare Web parte."

Procesul de bootstrap unghiulară pe este foarte uşor şi doar despre fiecare exemplu veţi găsi pe internet merge ceva de genul:

<HTML ng-app = 'AplicMea'>

<bla /><bla /><bla />

</HTML>

Acest lucru se descompune, cu toate acestea, Dacă doriţi pentru a permite mai multe CEWP reprezentând multiple părţi web unghiulară pe aceeaşi pagină. Unghiulară va numai automat bootstrap împotriva primei directive ng-app se constată – cel puţin începând cu versiunea unghiulare 1.3.6. Soluţia este destul de simplă-manual bootstrap codul în schimb. Cele de mai sus acum modificări la ceva de genul asta:

<corpul>
<d
IV id =”bootstrapHere” ng-controller =”myController ca theController”>
<bla /><bla /><bla />
</div>
</corpul>

<script src =”//AJAX.googleapis.com/Ajax/libs/angularjs/1.3.6/angular.js”></script-ul>

<script-ul>
angular.bootstrap(angular.element(document.getElementById(“bootstrapHere”)),['AplicMea']);
</script-ul>

Practic, în loc să utilizaţi ng-app pe element pentru a face dumneavoastră procesul de bootstrap, vă palmă un ID pe acel element. Apoi, utilizaţi bootstrap() metoda de unghiulară în sine pentru a controla procesul de bootstrap procesul de la run-time. Am testat acest lucru cu trei părţi web unghiulare diferite pe aceeaşi pagină şi funcţionează un farmec.

</scop>

undefinedAboneaza-te la blog-ul meu.

Urmaţi-mă pe Twitter, la http://www.twitter.com/pagalvin

New Jersey autovehicul Comisia ia o altă victimă

Deci, fiul meu este un pic de restante obţinerea permisul de conducere.  Ieri, în mijlocul dimineata, El camioane la Oakland NJ să-l.  El a ajunge acolo, completează actele lui este eliberat un permis unstamped şi învaţă că acum el trebuie să meargă la un alt MVC locaţie să ia testul său de ochi.  Deoarece, se pare că, testere de înaltă calificare ochi doar nu locuiesc oriunde, Deci NJ MVC trebuie să meargă în cazul în care este talentul.  Sau, poate este pentru că ele urmează o filozofie de Hamiltonian de consolidare?  De mult ca Hamilton simţit financiare şi fabricaţie consolidare au fost critice pentru viitorul puterea economică a Republicii, poate NJ MVC simte au nevoie consolida ochi testarea talentul pentru viitor puterea de NJ MVC?  Poate este parte a unui plan de inefabil?  Din păcate, Am numai intrebari pe acest subiect şi nici un răspuns. 

Oakland următoarele sfaturi, soţia şi fiul camion modul lor de la Lodi, NJ permis unstamped Lodi.  Lodi pot avea parcare cel mai rău de orice locatie de NJ MVC.  Şi, deoarece ei gazdă, de asemenea, unele dintre rare încă foarte râvnit ochi testarea maşini şi ochi profesionişti de testare, ele atrag împrumutători de toate culorile, nuante, educaţie şi gawkers.  Fiul meu funcţionează drumul prin labirint de linii şi direcţiile de profesionişti NJ MVC "never-look-them-in-the-eye" şi în cele din urmă ajunge la ochi linie de testare.  Ei învaţă acum că persoana Oakland a făcut o greşeală pe permisul unstamped.  El mis-tastat numărul de securitate socială, punerea un un "8" în loc de "2" într-una din cifre.  Persoana NJ DMV ştia acest lucru, pentru că atunci când a tras în sus că SS# greşit în calculator, Aceasta nu arată numele fiului meu.  Soţia şi fiul spune, "oh, care este numărul greşit, ai nevoie de un '2' acolo în loc de un "8." "  Ceea ce mulţi, poate că fiecare persoană corect minte aştepta la acest punct este pentru o persoană de NJ MVC să corecteze pur şi simplu numărul ei tocmai a intrat în computer.  Ha! Prost!  nu, în schimb, a fost rugat să furnizat cardul său de securitate socială.  Hai sa face o digresiune pentru un moment şi Gândiţi-vă că pentru a obţine permis unstamped în primul rând, El a furnizat deja un paşaport american, precum şi un New Jersey certificatul de naştere şi scrisoare scrisă pentru a-l la adresa lui acasă.   Mama lui este cu el, împarte numele său, adresa lui, înălţimea sa (dar din pacate, nu sa gust în sci-fi filme) ... tu nume it, fiul meu este bine şi cu adevărat identificate ca viata mult timp rezident din aceste state din SUA şi într-adevăr, New Jersey în sine de orice măsură vă puteţi imagina.  În cazul în care persoana NJ MVC ar fi pur şi simplu stabilit greşeală că persoana Oakland făcut, computerul ar fi tras fiul meu de informaţii şi că ar fi fost sfarsitul povestii.  Dar, din nou, prost!  Ei nu pot face asta. În schimb, NJ MVC insista pe un card de securitate socială de acum. 

Deci, soţia şi fiul merge acasă să-l şi retur.  Şi în final, El obține permisul de.

Asta e trei diferite excursii la NJ MVC într-o zi.  Pentru a obţine permisul.  A fost nevoie de aproape 6 de ore de la început până la sfârşit.  Acesta este fiul meu introducere la conducere în statul de gradina.

NJ MVC este în mod clar rupt. 

</scop>

Unghiulare Fails la spre Bootstrap în IE9

Am jucat în jurul cu Angular.js pentru ultimele lung în timp ce şi pentru viaţa de mine, NU am putut obţine meu apps unghiulare pentru a lansa în IE9.  Toate lucrează bine în IE11 dar IE9 ar arăta doar figurate şi biţi similare.

Am căutat în jurul şi nu a putut găsi pe nimeni plângându-se despre problema lui.  It worked fin în Chrome, IE11, nu doar IE9.

Am fost aruncat în afara de faptul că consola IE a fost oferindu-mi erori de genul asta:

SEC7111: HTTPS securitatea e compromisa de res://Ieframe.dll/forbidframing.htm

Acea eroare a avut mă gândesc a fost unele probleme descărcarea unghiulare sau alte biblioteci care am nevoie.  Aşa cum se dovedeşte, Acest lucru nu a fost problema.

De poking jurul Internet, În cele din urmă am aflat că fraza am nevoie pentru a căuta a fost "bootstrap" şi că se pare ca procesul de bootstrap a acestuia.  În cele din urmă, problema mea a fost că am avut decorat meu <HTML> Tag-ul cu atributul ng-app, ca şi în:

<HTML ng-app = "MatrixApp">

Bine, care nu au de lucru pentru IE9.  În schimb, Am înfăşurat tot restul de HTML în <corpul> în interiorul unui div şi referinţe MatrixApp în acest fel.

Problema rezolvata.

Sperăm că acest lucru economiseşte cineva ceva durere.

</scop>

Crearea de formulare SharePoint personalizate fără o pagină coordonatoare

Colegul meu, Lauren Jones, a scris un frumos plimbare prin pe Cum de a crea un formular de introducere date particularizate utilizând SharePoint Designer.  Că nu este exact "nou sub soare", dar există un pic de poftă de mâncare.  În cuvintele ei:

Crearea de formulare particularizate este drept înainte să facă în SharePoint Designer, Navigați la lista şi selectare panglica meniu "listă formular’ şi de a crea şablonul formular nou.

Aceasta funcţionează bine dacă doriţi formular se anexează la tine pagină coordonatoare, dar ce dacă aveţi în cazul utilizării creează un formular care este într-o fereastră de tip pop-up sau standalone fără crom SharePoint. Am avut exact acest caz de utilizare, Am vrut personalizat stil formă, apoi utilizaţi acest formular într-un pop-up div inline într-o pagină.

Nu dispera, Există o modalitate de a face acest lucru, care nu este intuitiv că dar destul de uşor pentru a realiza.

Puteţi citi toate detaliile aici: http://www.bigapplesharepoint.com/pages/View-An-Insight.aspx?BlogID=55&rtitle=customforms&rsrouce=pgblog şi îl puteţi vedea în acţiune făcând clic pe linkul "contactaţi-ne pentru mai multe informaţii" pe oricare dintre serviciile pe pagina Servicii site-ul nostru Big Apple SharePoint (http://www.bigapplesharepoint.com/services).

Lauren scrie o mulţime de lucruri bune UX şi branding.  Puteţi vedea mai mult de scris aici aici: http://www.bigapplesharepoint.com/team?showExpertName=Lauren%20Jones.

</scop>

Distrag Design şi stare de ebrietate pe caracteristica Coolaid

Colegul meu, Lauren Jones (https://twitter.com/laurenjones02) a scris un scurt articol vorbesc despre cum prea complexe SP rollouts sunt foarte greu pe utilizatorii finali.  Este un fel de evident, într-un mod, dar este uşor pentru mine să spun că, după ce-am orchestrat o mulţime de implementat complexe de lucruri nepregătiţi utilizatorilor finali de a lungul anilor.

Aici este cheia "grafic:

Cinci ani în urmă, Când am laminate SharePoint la o organizaţie pentru prima dată cu scopul principal de a deveni platforma de colaborare şi înlocuirea cota de unităţi, am introdus, de asemenea, sociale şi fluxurile de ştiri prin RSS, Meu site-uri şi profile, şi de etichetare a folksonomy. Inutil să spun, Acest lucru a fost mult pentru utilizatorii finali să adopte într-o deviere. În timp ce acolo a fost de succes cu adoptarea în apropiere de document management şi profile, RSS şi etichetare a fost mai puţin succes şi acest lucru a fost într-adevăr, ca urmare a schimbării managementul comunicării şi formare. Nu am putut face toate la o dată. A lua mai puţin este mai mult de abordare şi eliberarea funcţionalitate în faze este mai uşor pentru utilizatorii finali să accepte şi să le adopte pentru a.

Acest articol aduce aminte de un alt pic am citit de Kris Gale legate de set de caracteristici Yammer pe, “O costa inginerii şi managerii de produs nu ia în considerare.”

Dacă aveţi o poveste de groază sau o poveste de succes pentru a partaja, Sper că veţi face că în Comentarii pe site-ul Big Apple.

</scop>

Săptămânal Adunarea – Iulie 13, 2014

I pentru a xpost acest aici peste week-end trecut. 

Aici este 3Rd articolul într-o serie în care scriu despre blog şi articole online, care au fost deosebit de interesant pentru mine în ultima săptămână sau cam asa ceva.  În această săptămână de intrare în seria evidenţiază două proiecte CodePlex pentru un potenţial înlocuitor InfoPath şi pentru gestionarea permisiunilor cu SharePoint, Stiri despre sateliþi, Totuşi, un alt cadru JavaScript şi un nod la Ada Babbage şi rolul ei în istoria de calcul.

Puteţi citi aici: http://www.bigapplesharepoint.com/pages/View-An-Insight.aspx?BlogID=93&rsource=pgblog&rtitle=roundup

</scop>

Vezi florin interogări în timp Real cu ULS Viewer

Colegul meu, Steven Patel, scris sus un frumos plimbare prin descrie modul de a vedea florin în spatele diverse SP interogări care se întâmplă în cadrul activităţii în timp real utilizând vizualizatorul ULS.

Aici este intro:

Ai vrea să ştiu ce florin interogări sunt executate de SharePoint Server?

Bine, pentru depanare şi scopul de învăţare, nu este o idee rea. la urma urmei, SQL Profiler a fost ajutându-ne depana o mulţime de probleme.

Pot fi produse de acolo, dar m-am gândit o modalitate de a face acest lucru fără cheltuieli suplimentare de dolari! Şi aici este...

Puteţi citi totul aici: http://www.bigapplesharepoint.com/pages/View-An-Insight.aspx?BlogID=68&rsource=pgblog&rtitle=caml.

</scop>