25 Nisan 2016 Pazartesi

$rootScope'un uygulamanın farklı yerlerinde bind edilmesi

Mesela badge göstereceksiniz. Badge'i bir ana ekranda menü düğmesinin üzerinde bir de yan menüde ilgili bölümün yanında (5) gibi göstereceksiniz. Verinin ortak biyerden alınması lazım. Ana ekranınızda controller içinde $scope.badge = 5; derseniz doğal olarak sadece orada kullanırsınız. ortak kullanım için $rootScope.badge = 5; yapın. Arkasından html kod içinde {{$root.badge}} kullanımı işi halledecektir.

17 Nisan 2016 Pazar

Sourcetree'ye neler oluyor? Cannot lock branch origin master

Windows ve Mac'te SourceTree kullanıyorum. Bazen kırk yılın başında bir local master brach bozuluyor ve windows'ta pull yapamaz hale geliyorum. En sonunda Allah'a şükür çözümü buldum :)

SourceTree'de sağ en üst kısımdan Terminal açılır.
rm .git/refs/remotes/origin/master
ve
git fetch
yapılır.

Kelebekler uçuşur... Haneye huzur gelir...

15 Nisan 2016 Cuma

Çıldırtan CORS belası

"Evet çıldırdım... CORS'tan çıldırdım. Delice, hayvan gibi, ellerimle deliler gibi kod yazarak" :))))

CORS belası tamam bir güvenlik unsuru ama development yaparken sıçırtıcı derecede uğraştırıyor. Ama en azından asp.net mvc için bir çözüm buldum. CORS'u sunucudan response header'ına bir ekleme yaparak çözebiliyoruz.

Projenizin herhangi bir yerine AllowCrossSite.cs adında bir class oluşturun.
İçi de şöyle birşey olacak...

public class AllowCrossSiteAttribute : System.Web.Mvc.ActionFilterAttribute
{
        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            filterContext.RequestContext.HttpContext.Response.AddHeader("Access-Control-Allow-Origin", "*");
            base.OnActionExecuting(filterContext);
        }
}

Bu filtre üzerine yazıldığı her action'ın header'ına Access-Control-Allow-Origin = "*" yapıyor.

Cross origin enable etmek istediğiniz action üzerine attribute'u ekleyebilirsiniz. Şu şekilde...

[AllowCrossSite]
public ActionResult AdBanners()
{
      return View();
}

Hadi kolay gelsin.

13 Nisan 2016 Çarşamba

İstediğim emulatörle test yapmak istiyorum

Bu yazıyı yazdığım şu günlerde ionic emulate komudunu öyle yada böyle çağırınca default olarak 6S Plus emulatörü açılıyor. Başka birşey kullanmak isterseniz ki daha küçük ekran boyutlarını denemek isteyeceksiniz... notasyon aşağıdaki gibi. ios olarak belirmeyi ve --target'ı doğru yazdığınızdan emin olunuz sevgili ionic sevdalıları.

ionic emulate ios --target="iPhone5S" -l -c -s

Emulatör seçenkleri ise yaklaşık şöyle birşey

iPhone-4s
iPhone-5
iPhone-5s
iPhone-6-Plus
iPhone-6
iPad-2
iPad-Retina
iPad-Air
Resizable-iPhone
Resizable-iPad

12 Nisan 2016 Salı

Uygulamadan telefonun browser'ına url yollamak istiyorum.

cordova plugin add https://git-wip-us.apache.org/repos/asf/cordova-plugin-inappbrowser.git

proje klasörü içerisinde çalıştırılır ve kurulur...

<a class="item" href="#" onclick="window.open('http://www.google.com/', '_system', 'location=yes'); return false;">
    Open a Browser
</a>

şeklinde çağırılarak kullanılır. Olay nettir...

11 Nisan 2016 Pazartesi

$http isteklerim error'a düşüyor!!!!

Evet sistemi baya çözdün ve bir uygulama yazmaya başladıııın :) Güzel. Ve sunucudan istekte bulunman gerekiyor. Envayi çeşit $http örneğini denedin ama bi sorun var. İstekler hep error'a düşüyor ve hata mesajı yok.

İlk olarak $http istek şekillerine bi bakalım

$scope.loadAds = function () {
        $http.get('http://www.domain_adim.com/MobileService/Ads'
        ).then(function (response) {
            console.info("success: ", response.data[0].LinkUrl);
        }, function (error, e2) {
            console.info("error %o %o", error, e2);
        });
    }

veya

[bu örneği sonra ekliycem :)) ]

Bu iki şekilden birini yaptığında dikkat edersen console çıktısı mesela Chrome console'unda

XMLHttpRequest cannot load http://www.superfaiz.com/MobileService/Ads. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://192.168.0.18:8100' is therefore not allowed access.

Cihaz diyo ki "abi bokunu yiyim ben CORS (Cross origin resource sharing) yüzünden başka biyerden veri çekmeye çalışıyorum ama yapamam" diyor :D Güvenlikten dolayı adamlar CORS için birkaç çözüm sunmuşlar. Bunlardan en işe yarar olanını şöyle tatbik ediyoruz.

ionic.project dosyamızın içine json'ın en sonuna

,
  "proxies": [
    {
      "path": "/MobileService/",
      "proxyUrl": "http://www.domain_adim.com/MobileService/"
    }
  ]

tanımlaması ekliyoruz

ve mevcut kodumuzdaki adresi şu şekilde değiştirelim

$http.get('http://192.168.0.18:8100/MobileService/Ads'
        ).then(function (response) {
            console.info("success: ", response.data[0].LinkUrl);
        }, function (error, e2) {
            console.info("error %o %o", error, e2);
        });

Böylece yerelde MobileService altına yaptığımız istekler yerel proxy sayesinde domain_adi altına yönleniyor.

Kolay gelsin.

9 Nisan 2016 Cumartesi

iOS Emulator livereload'la çalışmıyor!!!!!

Bir sürü şey denedim. Yanlışlıkla ionic komutlarını sudo ile çalıştırdım ortalık daha da bi sıçtı, normal ionic emulate ios bile çalışmaz oldu sonra chown yaparak düzelttim de hala sorun devam ediyordu. En sonunda platforms/ios altındaki projeyi xcode'da açtım biraz inceledim sonra bir makalede <allow-navigation href="*"/> satırını config.xml'e ekleyin yazıyordu. <access origin="*"/> satırının altına ekledim ve şıkır şıkır çalışmaya başladı. Haydi hayırlı traşlar.